struts2 相关问题

Apache Struts 2是一个基于servlet的可扩展框架,在其架构中实现了模型 - 视图 - 控制器(MVC)模式,用于创建企业级Java Web应用程序。

struts2-convention 和 struts2-config-browser-plugin 无法工作

我在struts2中使用struts2-convention-plugin和struts2-config-browser-plugin,如果我更改web.xml中的默认struts.xml路径: struts2 ...

回答 1 投票 0

struts.xml如何用变量替换<result>WEB-INF/account/ad_tools.jsp</result>的部分路径

现在我有了 WEB-INF/account/ad_tools.jsp 我想将 WEB-INF/account 替换为类似 {basePath} 的内容,我可以得到 现在我有了 <result name="success">WEB-INF/account/ad_tools.jsp</result> 我想用这样的东西替换WEB-INF/account,我可以得到{basePath} 我仍然可以在需要时更改变量<resutl name="success">{basePath}/account/ad_tools.jsp</result> 。 我应该把变量basePath放在哪里以及如何做? 或者如果您有其他方法来处理我的问题? 简单的方法就是把这个变量basePath放入值栈。您可以通过多种方式做到这一点。例如 basePath 默认会解析结果属性,因此您可以在结果声明中使用它。 ActionContext.getContext().getValueStack().set("basePath", "/WEB-INF/account"); 另一种方法是使用约定插件,您可以在其中定义常量 <result name="success">${basePath}/ad_tools.jsp</result> 并使用注释来覆盖约定配置 <constant name="struts.convention.result.path" value="/WEB-INF/account/"/>

回答 1 投票 0

当 API 请求与 JSON Body 一起发送时,具有 {id} 的 Struts2 REST-API 未正确映射

这是我的文件。 struts.xml 这是我的文件。 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true"/> <!-- restrictToGET to false makes the response to be of JSON type when request if of type POST, PUT, DELETE--> <constant name="struts.rest.content.restrictToGET" value="false"/> <constant name="struts.convention.action.suffix" value="Controller"/> <constant name="struts.convention.action.mapAllMatches" value="true"/> <constant name="struts.convention.default.parent.package" value="rest-default"/> <constant name="struts.convention.package.locators" value="action"/> <constant name="struts.enable.SlashesInActionNames" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> <constant name="struts.patternMatcher" value="regex"/> <constant name="struts.matcher.appendNamedParameters" value="true"/> <package name="action" namespace="/" extends="rest-default,json-default"> <interceptors> <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/> <interceptor-stack name="jsonStack"> <interceptor-ref name="json"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <action name="hello" class="com.wildcard.action.HelloController"> <interceptor-ref name="jsonStack"/> <result type="json"> <param name="root">uid</param> </result> </action> <action name="hello/*" class="com.wildcard.action.HelloController"> <interceptor-ref name="jsonStack"/> <param name="id">{1}</param> <result type="json"> <param name="root">uid</param> </result> </action> </package> </struts> HelloController.java package com.wildcard.action; import com.opensymphony.xwork2.ModelDriven; import com.wildcard.model.Hello; import org.apache.struts2.rest.DefaultHttpHeaders; import org.apache.struts2.rest.HttpHeaders; public class HelloController implements ModelDriven<Object> { private Hello hello = new Hello(); private String id; private String uid; private Object model = new Object(); public HttpHeaders index() { hello.setName("index"); System.out.println("index() : " + hello); System.out.println("index() uid: " + uid); return new DefaultHttpHeaders("index"); } public HttpHeaders show() { hello.setName("show"); System.out.println("show() : " + hello); System.out.println("show() id: " + id); System.out.println("show() uid: " + uid); return new DefaultHttpHeaders("show"); } public HttpHeaders create() { //hello.setName("create"); System.out.println("create() : " + hello); System.out.println("create() id: " + id); System.out.println("create() uid: " + uid); return new DefaultHttpHeaders("create"); } public HttpHeaders update() { hello.setName("update"); System.out.println("update() : " + hello); System.out.println("update() id: " + id); System.out.println("update() uid: " + uid); return new DefaultHttpHeaders("update"); } public HttpHeaders destroy() { hello.setName("destroy"); System.out.println("destroy() : " + hello); System.out.println("destroy() id: " + id); System.out.println("destroy() uid: " + uid); return new DefaultHttpHeaders("destroy"); } @Override public Object getModel() { model = hello; return model; } public void setModel(Object model) { this.model = model; } public Hello getHello() { return hello; } public void setHello(Hello hello) { this.hello = hello; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } } Hello.java package com.wildcard.model; public class Hello { private String name; public Hello() { } public Hello(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Hello{" + "name='" + name + '\'' + '}'; } } 当我发送请求 GET [/hello.json,/hello/{id}.json]、POST [/hello.json]、PUT [/hello/{id}.json]、DELETE [/hello/{id}.json],没有 JSON Body,它是工作正常。当我将 JSON Body 添加到上述请求时,只有以下请求有效,GET,POST [/hello.json]。当我将 {id} 添加到 URL 路径时,出现以下错误。 > HTTP ERROR: 500 Unable to show problem report: > > freemarker.core.InvalidReferenceException: The following has evaluated > to null or missing: > > ==> rootloc.URI [in template "org/apache/struts2/dispatcher/error.ftl" at line 84, column 15] > > ---- Tip: It's the step after the last dot that caused this error, not those before it. > ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default > value like myOptionalVar!myDefault, or use <#if > myOptionalVar??>when-present<#else>when-missing</#if>. (These only > cover the last step of the expression; to cover the whole expression, > use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? > ---- > > ---- FTL stack trace ("~" means nesting-related): > - Failed at: ${rootloc.URI} [in template "org/apache/struts2/dispatcher/error.ftl" at line 84, column 13] > ---- > > Class: freemarker.core.InvalidReferenceException File: > InvalidReferenceException.java Method: getInstance Line: 134 - > freemarker/core/InvalidReferenceException.java:134:-1 > RequestURI=/wildcard_sample/hello/2.json > > Powered by Jetty:// Java 堆栈跟踪(针对程序员): freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:481) at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:401) at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:370) at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:100) at freemarker.core.DollarVariable.accept(DollarVariable.java:63) at freemarker.core.Environment.visit(Environment.java:334) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.process(Environment.java:313) at freemarker.template.Template.process(Template.java:383) at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.handleErrorInDevMode(DefaultDispatcherErrorHandler.java:118) at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.handleError(DefaultDispatcherErrorHandler.java:76) at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:923) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:589) at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79) at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 其余插件与约定插件配合良好,其中配置按约定自动添加。要让约定插件为应用程序中的操作创建配置,请使用以下设置 struts.xml: <constant name="struts.convention.action.suffix" value="Controller"/> <constant name="struts.convention.action.mapAllMatches" value="true"/> <constant name="struts.convention.default.parent.package" value="rest-default"/> <constant name="struts.convention.package.locators" value="action"/> web.xml: struts2过滤器的参数 <init-param> <param-name>actionPackages</param-name> <param-value>com.wildcard.action</param-value> </init-param>

回答 1 投票 0

org.apache.struts2.dispatcher.Dispatcher:找不到操作或结果错误

我尝试编写以下简单的struts,但在运行时遇到此错误。 [org.apache.struts2.dispatcher.Dispatcher] 找不到操作或结果: 没有为行动com定义结果...

回答 1 投票 0

运行 Struts v6.3.0.2 时无法加载网页 - 运行 java.lang.NoClassDefFoundError

我在使用 Struts v6.3.0.2 时运行 Web 应用程序时遇到问题。当我尝试在浏览器上加载页面时,收到以下错误。 过滤器 struts2 抛出的未捕获异常:java.lang.

回答 1 投票 0

运行 Struts2 v6.3.0.2 时无法加载网页 - 运行 java.lang.NoClassDefFoundError

我在使用 Struts2 v6.3.0.2 时运行 Web 应用程序时遇到问题。当我尝试在浏览器上加载页面时,收到以下错误。 过滤器 struts2 抛出的未捕获异常:java.lang.

回答 1 投票 0

升级到 Velocity-tools 3.1:在 /WEB-INF/toolbox.xml 找不到任何配置

我正在从 struts2-core 2.5.22 -> struts2-core 6、velocity-engine-core 1.7 ->velocity-engine-core 2.3 和velocity-tools 2.0 ->velocity-tools-generic 3.1 升级我的项目 在之前的...

回答 1 投票 0

启动过滤器操作时出现异常 - 无法加载配置 - java.net.UnknownHostException:struts.apache.org

我的互联网连接正常, 所需的 jar 也存在于类路径中, 并且 jar 的版本是匹配的。需要知道我哪里出错了 方法:连接 行:177 - java/net/

回答 1 投票 0

Bean 已注册 - struts2-core 依赖错误

我正在尝试将项目迁移到 Maven 并声明 Struts 2 依赖项,但我遇到了这个错误。我已经仔细检查了 pom.xml 依赖项,确保 struts2-core 仅声明为...

回答 1 投票 0

NoSuchMethodError:在 Apache Tomcat 8 上部署 Struts 2 应用程序时出现 ConfigurationManager.addConfigurationProvider

应用程序在本地计算机上运行良好。 在服务器上,我有 JDK-1.7 和 Tomcat 8。它在本地主机日志中给出以下错误。该 jar 存在于应用程序的 lib 目录中。

回答 4 投票 0

WebContent 下的 Struts 2 上传文件目的地

我想将 Struts 2 上传文件目标放置在我的应用程序的 WebContent 下。 我已经使用过这个方法: ServletContext 上下文 = ServletActionContext.getServletContext(); 字符串

回答 2 投票 0

从 2.5.29 升级到 2.5.33 时出现 Struts2 DependencyException - 缺少 JAR 依赖项?

由于报告的安全问题,我正在努力更新 Struts2 应用程序。目前它使用的是 2.5.29,需要使用最新的 2.5.33。这是一个旧的应用程序,使用...

回答 1 投票 0

Struts2 验证问题

我正在尝试使用 Struts2 验证注释来验证表单,但它似乎不起作用,并且标签上没有显示所需的标记。 这是我的代码: 登录.jsp: 我正在尝试使用 Struts2 验证注释来验证表单,但它似乎不起作用,并且标签上没有显示所需的标记。 这是我的代码: login.jsp: <s:form action="/Login" validate = "true"> <table> <tr> <td><s:label theme=”simple” required="true">Username :</s:label></td> <td><s:textfield name="userName" theme=”simple” /></td> </tr> <tr> <td><s:label theme=”simple” required="true">Password :</s:label></td> <td><s:textfield name="password" theme=”simple” /></td> </tr> <tr> <td><s:submit value="Login" /></td> </tr> </table> </s:form> LoginAction.java: public class LoginAction extends ActionSupport { private String userName; private String password; @Validations(requiredStrings={@RequiredStringValidator(type=ValidatorType.FIELD, message="User Name can ot be empty.", fieldName="userName")}) public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Validations(requiredStrings={@RequiredStringValidator(type=ValidatorType.FIELD, message="Password can ot be empty.", fieldName="password" )}) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() { return SUCCESS; } } struts.xml: <struts> <package name="demo" extends="struts-default"> <action name="*" class="mypkg.action.{0}Action"> <result name="success">/success.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts> 有人可以帮忙并注意我的代码是否有问题吗? 如果您使用 Validations 注释,那么您应该将其放在操作方法上。验证器注释放置在 setter 方法上。此外,您还使用 validate = "true",这意味着客户端验证。确保您已将 javascript(在 <s:head/> 的帮助下)和主题(如 xhtml 或 css_xhtml)应用于表单,以使验证错误可见。 IE。主题 simple 在这里不起作用,请将其从字段中删除。 如果不指定主题,那么Struts 2将使用xhtml主题 默认情况下。 参考资料: Struts2主题介绍 客户端验证示例 验证示例 头标

回答 1 投票 0

更改struts2的默认语言环境

如何将 struts.properties 文件中指定的 struts2 默认区域设置修改为 struts.locale ? 默认区域设置是“en”,我需要将其更改为“en_Us” 我尝试如下 如何将 struts.properties 文件中指定的 struts2 默认区域设置修改为 struts.locale ? 默认区域设置是“en”,我需要将其更改为“en_Us” 我尝试如下 <constant name="struts.locale" value="en_US" /> 在我的 struts.xml 文件中。 我知道这是迟到的答案,但有一天有人会发现这是他或她长期以来一直在寻找的东西。 Struts2 框架根据浏览器的语言偏好设置默认区域设置,也就是说,它会查看 Accept-language 请求标头,如果没有找到,则转到 struts 属性进行查找。 因此,如果您想更改为 en_US 语言环境,那么您应该在浏览器参数中进行设置,设置为第一首选语言。 如果你想改变这种行为,你可以编写拦截器来为 ActionContext 设置所需的区域设置。 这里参考API http://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/ActionContext.html#setLocale(java.util.Locale) 不要忘记将您的拦截器放入 struts.xml 文件中的拦截器堆栈中。 有关创建自己的拦截器的教程: http://www.tutorialspoint.com/struts_2/struts_interceptors.htm 希望,它会对某人有所帮助。 添加到 Yan Pak 的答案,使用以下自定义拦截器对区域设置进行硬编码,忽略 Struts 尝试根据浏览器的 Accept-Language 标头执行的操作。 import java.util.Locale; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class USLocaleInterceptor implements Interceptor { private static final long serialVersionUID = 1L; @Override public void destroy() { } @Override public void init() { } @Override public String intercept(ActionInvocation invocation) throws Exception { invocation.getInvocationContext().setLocale(Locale.US); return invocation.invoke(); } }

回答 2 投票 0

Struts 2 - 具有数千个选项的多选

我在JSP中有以下多选块 在 标签内。当我提交表格时 操作方法工作正常。 我在 JSP 中有以下多选块 在 <s:form> 标签内。当我提交表格时 操作方法工作正常。 <s:select id="prodSelect" list="#application.actionForm.vtrProduct" name="repSearchProdVO.product" multiple="true" emptyOption="false" headerKey="-1" theme="simple" style=" font-size: 14px; color: #000069; font-family: 'Arial, Helvetica, sans-serif'; height: 20px; width: 240px; " value="#session.repSearchVO.product" /> 但是,repSearchProdVO.product 只能处理 890 个选项。 我有超过3000个选项需要选择。 当我选择 2000 个选项时,它仍然返回 890 个选项。 如果有任何帮助,我将不胜感激。 我忘了提及服务器是Tomcat 9.0.75。 server.xml 中端口 8080 的 maxParameterCount 的默认值为 1000。我将其更改为 10000,一切都按预期工作。这可能会对某人有所帮助。 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="10000" />

回答 1 投票 0

使用 <s:if> 标签检查用户是否处于 Struts 2 中的会话中

我想知道是否可以使用 Struts 2 的 标签检查用户是否处于会话中。 如果用户正在会话中,我需要显示“注销”,否则“登录”。 我使用接口...

回答 1 投票 0

如何知道从哪个类收到请求

我的应用程序中有一个login.jsp 页面。我使用 Struts 2 和一个简单的 validate() 方法来验证我的表单。我有两个问题: 我的表单 bean 类中的 validate() 方法验证表单。 ...

回答 3 投票 0

为什么 NullPointerException 出现在 index.jsp 文件中,<s:a> 标签不起作用

HTTP 状态 500 – 内部服务器错误 类型异常报告 消息 在第 [31] 行处理 [/index.jsp] 时发生异常 描述 服务器遇到意外情况

回答 1 投票 0

如何在Struts 2中从JSP页面调用Java方法

我是 Struts 2 的新手,(从 jsp 切换到 Struts2) 我的 Struts2 应用程序中有 3 个 java 类文件和 4 个 jsp 页面 我必须调用一个java类文件的2种不同方法(let class_01) Fr...

回答 1 投票 0

HTTP 状态 500 – 用新的 struts2 6.3.0 jar 替换 struts1 jar 后出现内部服务器错误

HTTP 状态 500 – 内部服务器错误 类型异常报告 消息 在第 [31] 行处理 [/index.jsp] 时发生异常 描述 服务器遇到意外情况,之前...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.