Apache Struts 2是一个基于servlet的可扩展框架,在其架构中实现了模型 - 视图 - 控制器(MVC)模式,用于创建企业级Java Web应用程序。
如何使用 $.getJSON() 方法从操作类获取 String 值?
我尝试使用 $.getJSON() 方法从操作类获取 String 值,但得到的结果为未定义。这是我尝试过的代码片段 脚本: $(函数() { ...
我有一个注册程序。当我在数据库中插入一条记录时,我将实例化一个类并调用方法 insert()。当我插入相同的记录时,当然会出现重复数据错误...
如何在 Struts 2 中将 <s:select> 标签与两个相同类型的列表一起使用?
我正在使用Struts 2,因为我有要求, 我必须填充两个相同类型的不同列表作为下拉框 在 Struts 2 中可以吗? 演示代码如下: 我使用 Struts 2 因为我有要求, 我必须填充两个相同类型的不同列表作为下拉框 在 Struts 2 中可以吗? 演示代码如下: <s:select list="{list1 , list2}" value="" /> 列表包含相同类型的 VO,但数据不同。 首先:你最好在操作类中而不是在 JSP 中做这种事情。 在 JSP 中您可以使用 <s:append> 标签。 <s:append var="appendedLists"> <s:param value="list1" /> <s:param value="list2" /> </s:append> <s:select list="#appendedLists" value="" /> 使用 OGNL 序列运算符逗号 (,)。该运算符允许计算 OGNL 表达式序列。例如 <s:set var="list1" value="{1,2}"/> <s:set var="list2" value="{3,4}"/> <s:select list="%{#list1.addAll(#list2), #list1}" /> 通过计算第一个表达式来添加第二个列表中的所有元素,然后从第二个表达式中返回此列表作为结果。
为什么 Tuckey URL 重写在 Struts 2 中不起作用? [重复]
我已配置 Tuckey URL 重写。 我已在 pom.xml 中包含依赖项: org.tuckey url重写文件...
尝试使用传递参数重定向到外部 URL。 我的代码如下: 尝试使用 pass 参数重定向到外部 URL。 我的代码如下: <action name="testit" class="TestAction" method="test"> <result name = "success" type = "chain"> <param name="location">${at.url}</param> <param name="login">${at.login}</param> <param name="pass">${at.pass}</param> </result> </action> action类中的方法是: public String test(){ at.setUrl("http://www.test.com"); at.setLogin("ssfd"); at.setPass("ssfd"); } 我面临以下错误: Info: 2017-11-29 15:23:39 ERROR Dispatcher:38 - Exception occurred during processing request: null java.lang.NullPointerException at com.opensymphony.xwork2.util.OgnlTextParser.evaluate(OgnlTextParser.java:22) at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:170) at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:127) at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:49) at com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:207) at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371) 如何解决这个问题? chain结果类型不会重定向。而是使用 redirect 结果类型。 <action name="testit" class="TestAction" method="test"> <result name = "success" type = "redirect"> <param name="location">${at.url}</param> <param name="login">${at.login}</param> <param name="pass">${at.pass}</param> </result> </action>
使用 HTML <form> 标签代替 Struts 2 <s:form> 标签是否有效?
我想用 我想用 <form action="someClass"> <s:textarea name="name" label="Name"/> <s:checkboxlist list="{'Male','Female'}" name="gender" label="Gender"/> </form> 而不是 <s:form action="someClass"> <s:textarea name="name" label="Name"/> <s:checkboxlist list="{'Male','Female'}" name="gender" label="Gender"/> </s:form> 因为 <s:form> 标签的默认主题 "xhtml" 与我的 CSS 和主题不兼容 "simple" 如果不使用 <s:fielderror> 标签,它本身无法显示验证错误。 那么使用它有效吗? 到现在为止我都这样使用。我以后这样使用会遇到什么错误吗? 当然您可以使用纯 HTML 标签。 请记住,所有 JSP 自定义标签最终都是渲染 HTML。[1] 正如 Roman 所说,您将失去自动填充值、通过属性名称或键检索标签、错误消息和样式显示等功能。 您最好的做法可能是创建自己的主题并使用自己的模板和 CSS,或者使用 "css_xhtml" 主题并提供您自己的样式。哪个更好取决于我们没有的大量信息,但是 CSS HTML 版本相当灵活,除了必须将 <br/> 标签定义为内联,因为它当前在主题中应该使用的地方不是。 [1] 是的,在通过 HTML 发送之前,它可以在服务器端执行其他操作,例如 SQL 自定义标记。不过,一般来说,自定义标签的目的是发出 HTML。 您可以使用 <form> 标签来处理表单,但它不是 <s:form 标签,您必须手动维护它的属性。 <s:form 使用与框架精确通信的良好属性预设来渲染 <form> 标签。忽略它会缺少框架提供的一些功能,从而导致不正确的用法和错误。
我已经有一个基于 Java 5 和 Struts 2 MVC 框架构建的现有应用程序,具有 Oracle 11g DB。 应用程序具有大量表,通常使用插入或
我已经有一个基于 Java 5 和 Struts 2 MVC 框架构建的现有应用程序,具有 Oracle 11g DB。 应用程序有大量的表,通常使用插入查询或向上更新......
我有多个 JSP,每个 JSP 都包含一个或多个表。 片段1.jsp: ... 我有多个 JSP,每个 JSP 都包含一个或多个表。 fragment1.jsp: <table class="foo"> <tr> <td>stuff</td> <td>stuff2</td> </tr> </table> fragment2.jsp: <table class="foo"> <tr> <td>more stuff</td> <td>more stuff2</td> </tr> </table> <table class="bar"> <tr> <td>whatever</td> </tr> </table> 它们由不同配置的包装器使用: wrapper1.jsp: <s:include value="fragment1.jsp" /> <s:include value="fragment2.jsp" /> wrapper2.jsp: <s:include value="fragment2.jsp" /> 如果fragment2.jsp出现在fragment1.jsp之后,我希望这两个表格之间没有边距并显示为一张表格。但是,如果其中任何一个是单独的,我希望它们的格式正常,就像 "foo" 表格的样式一样。 有没有办法以某种方式指示此样式首选项,以便两个"foo"表格在相邻时显示为单个表格,但在其他情况下正常样式? 我对 Struts/JSP 有点陌生,正在处理一些混乱的遗留代码,所以请帮助我了解是否可以通过其他方法更好地解决这个问题。 实际上仅使用 CSS 即可实现,无需 JavaScript 且无需更改 HTML。 一个全屏演示抵得上一千字... 基本上,您需要使用 border-collapse: collapse; 并指定以下设置: 当表格单独存在时,所有边框和边距通常设置: table { border-collapse : collapse; border : 4px solid black; margin-top : 20px; margin-bottom : 20px; } 当桌子与一张或多张其他桌子相邻时: 如果不是第一个,删除margin-top和border-top: table + table { margin-top : 0; border-top : none; } 如果不是最后一个:删除margin-bottom和border-bottom: table:not(:last-child) { border-bottom : none; margin-bottom : 0; } 还要确保避免在每个表格的最后一个 <tr> 上设置边框: tr:not(:last-child) { border: 1px solid silver; } 最好使用 javascript 和 jquery 来完成此类工作。所以我认为这会有所帮助: $(document).ready(function(){ var secondTable = $(".bar").html(); $(".foo").append(secondTable); }); 注意,如果您还没有包含 jquery 库,则需要包含它。 如果不使用表格数据,则无需使用表格。您始终可以使用 div 或 span 标签。 <div class="foo"> <span>more stuff</span> <span>more stuff2</span> </div> <div class="bar"> <span>whatever</span> </div> CSS 选择器 table.foo + table.foo 将选择 table.foo 中出现在另一个相同类型元素之后的每个元素。 您可以使用它来删除以下 table.foo 元素之后的 all 的边距: table.foo + table.foo { margin-top: 0px; margin-bottom: 0px; } 如果它仅适用于 second 元素,请使用 table.foo:nth-child(2) 代替。 东西 东西2
没有映射与上下文路径 [] 关联的名称空间 [] 和操作名称 [] 的操作
我是 Struts 2 的新手,我一直在关注 Struts 2 (Koushik) 的视频教程。我已经创建了 Struts.xml、操作类和 JSP,与教程中创建的相同。但它给出了
如何删除警告:Struts 2 标签中未定义的属性名称 []?
目前我们正在将 Struts 1 应用程序迁移到 Struts 2。将 JSP 标签更改为 Struts 2 时,我们在 Struts 1 中为 标签添加了属性 自动完成=\"关闭" ...
无法从 Struts 2 标签内部访问 scriptlet 变量
我正在尝试访问 JSP 中 Struts 2 标记内的 scriptlet 变量: <% Website website = (Website)request.getAttribute(Website.NAME); out.println(website.isUkSite()); // pr...
我有以下动作映射: ... 一个 两个 我有以下动作映射: <action name="theAction" ...> ... <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> ... </action> 我可以使用Interceptor中的以下行获取参数映射: Map<String, Object> params = ActionContext.getContext().getParameters(); 如上所述,有没有办法获取拦截器参数,如以下映射中所定义: <action name="theAction" ...> ... <interceptor-ref name="theInterceptor"> <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> </interceptor-ref> ... </action> action 参数定义如下,action 参数和拦截器参数应该是分开访问的。 <action name="theAction" ...> ... <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> .... <interceptor-ref name="theInterceptor"> <param name="param1">one</param> <param name="param2">two</param> ... <param name="paramN">nth-number</param> </interceptor-ref> ... </action> 请注意,我不想在拦截器中将参数字段声明为 //all fields with their getters and setters private String param1; private String param2; ... private String paramN; 在 Dev Blanked 的回答之后,我实施了他的技术。它不起作用,所以我在这里分享我的代码。我使用的是 Struts 2.3.1.2。 图书馆 asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang-2.5.jar freemarker-2.3.18.jar javassist-3.11.0.GA.jar ognl-3.0.4.jar struts2-core-2.3.1.2.jar xwork-core-2.3.1.2.jar struts.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="the-base" namespace="/" extends="struts-default" abstract="true"> <interceptors> <interceptor name="header" class="demo.interceptors.HttpHeaderInterceptor"></interceptor> <interceptor-stack name="theStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="header"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="theStack"></default-interceptor-ref> </package> <package name="the-module" extends="the-base"> <action name="theAction"> <result>/the-action.jsp</result> <interceptor-ref name="theStack"> <param name="header.Cache-control">no-store,no-cache</param> <param name="header.Pragma">no-cache</param> <param name="header.Expires">-1</param> <param name="header.arbitrary">true</param> </interceptor-ref> </action> </package> </struts> 拦截器: package demo.interceptors; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.StrutsStatics; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class HttpHeaderInterceptor extends AbstractInterceptor { private final Map<String, String> interceptorConfigs = new HashMap<String, String>(); @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("Calling 'intercept' method."); HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE); for(Entry<String, String> entry: interceptorConfigs.entrySet()) { String header = entry.getKey(); String value = entry.getValue(); System.out.printf("Adding header: %s=%s\n",header,value); response.setHeader(header, value); } return invocation.invoke(); } public Map<String, String> getInterceptorConfigs() { System.out.println("calling method 'getInterceptorConfigs'"); return interceptorConfigs; } public void addInterceptorConfig(final String configName, final String configValue) { System.out.printf("Calling method 'addInterceptorConfig' with params configName = %s, configValue=%.\n",configName, configValue); interceptorConfigs.put(configName, configValue); } } 控制台输出:(当按下theAction时) Calling 'intercept' method. 在您的自定义拦截器中,您可以定义如下所示的地图 private final Map<String, String> interceptorConfigs = new HashMap<String, String>(); public Map<String, String> getInterceptorConfigs() { return interceptorConfigs; } public void addInterceptorConfig(final String configName, final String configValue) { interceptorConfigs.put(configName, configValue); } 然后在您的操作映射中,您可以传入如下参数..这些将存储在拦截器的映射中 <action name="yourAction" class="your.actionClass"> <result name="success">some.jsp</result> <interceptor-ref name="defaultStack"> <param name="yourInterceptor.interceptorConfigs.key">value</param> <param name="yourInterceptor.interceptorConfigs.aParamName">paramValue</param> </interceptor-ref> </action> “yourInterceptor”是指您在将拦截器添加到struts.xml时指定的拦截器的名称。当像上面那样配置时,拦截器内的“interceptorConfigs”映射将具有 , 键/值对。 如果您想让这些可用于您的操作,您只需在 ActionContext 中将地图设置为上下文变量即可。然后可以在操作中检索它。 简而言之,我会说不,如果您在 interceptor-ref 元素中定义拦截器参数,则无法获取它们。这些参数是在构建期间设置并应用于拦截器的。但是,如果您将参数放入 interceptor 元素,例如 <interceptor name="theInterceptor" class="com.struts.interceptor.TheInterceptor"> <param name="param1">one</param> <param name="param2">two</param> </interceptor> 您可以即时检索它们 PackageConfig packageConfig = Dispatcher.getInstance().getConfigurationManager().getConfiguration().getPackageConfig("default"); Map<String, Object> interceptorConfigs = packageConfig.getInterceptorConfigs(); InterceptorConfig interceptorConfig = (InterceptorConfig)interceptorConfigs.get("theInterceptor"); Map<String, String> params = interceptorConfig.getParams(); 如果您不想在拦截器上定义属性来保存值,那么 OGNL 将不会设置这些值,但会尝试,所以我看不出不定义这些属性的原因,如果您的 xml 配置标记为无效,拦截器 bean 不包含这些属性,在这种情况下构建器可能会抛出异常。因此,我不建议不定义参数的属性。
升级到struts 2.3.15.1不会在action类上设置HashMap值
我将 Struts 从 2.1.6 升级到 2.3.15.1,因为最新版本中提供了安全修复程序。但是,现在表单字段值不会发布到 Action 类。 基本上,我填充...
我对 Struts 2 上的操作有疑问。 假设我有一个带有“保存”操作的表单。 我已在 struts.xml 上将该操作映射到某种方法,如下所示: 我对 Struts 2 上的操作有疑问。 假设我有一个包含操作 "save" 的表单。 我已将该操作映射到某种方法,如下所示:struts.xml 在我的 <action name="save" class="actions.agenda" method="save"> <result name="success">/agenda/success.jsp</result> </action> 类中,我使用 Action 方法加载表单中的一些参数,因此我创建了保存新条目的方法:execute 问题是我遇到了这个错误: public String save(){ ///Logic here dao.create(entry) return SUCCESS; } 有人可以给我关于这个问题的线索吗? web.xml SEVERE: Could not find action or result 我的操作 (<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>springOpenEntityManagerInViewFilter</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> <init-param> <param-name>entityManagerFactoryBeanName</param-name> <param-value>entityManagerFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>springOpenEntityManagerInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> ..... </web-app> ) 位于一个单独的 xml 上,称为 save,它包含在 Actions.xml 中。堆栈跟踪 struts.xml 其他动作效果很好。 您实际收到的投诉是Stacktraces No result defined for action actions.agenda and result input com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:376) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) com.sun.grizzly.ContextTask.run(ContextTask.java:71) com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) java.lang.Thread.run(Thread.java:722) 。 基本上,这意味着某些原因导致 Struts 认为您向其中一个属性提供了无效数据(或者验证方法添加了字段/操作错误)。 例如也许您有一个设置器,它接受一个整数,并将一个非整数值传递给它,类似的东西。 因为它无法将提供的值转换为适合 setter 的值,所以它会抱怨。 这会导致操作返回“INPUT”值,而您没有为其定义结果。 通常,这里要做的是返回保存“输入”结果之前呈现的相同表单,因为正常的 Struts 2 标签(如 No result defined for action actions.agenda and result input 或 <s:textfield>)将在相应字段上方显示字段错误。 如果您提交表单,您应该提供 <s:select> 类型的结果。所以 input
我对 Struts 2 上的操作有疑问。 假设我有一个带有“保存”操作的表单。 我已在 struts.xml 上将该操作映射到某种方法,如下所示: 我对 Struts 2 上的操作有疑问。 假设我有一个包含操作 "save" 的表单。 我已将该操作映射到某种方法,如下所示:struts.xml 在我的 Action 类上,我使用 <action name="save" class="actions.agenda" method="save"> <result name="success">/agenda/success.jsp</result> </action> 方法加载表单中的一些参数,因此我创建了保存新条目的方法:execute 问题是我遇到了这个错误: 严重:找不到操作或结果 有人可以给我关于这个问题的线索吗? web.xml public String save(){ ///Logic here dao.create(entry) return SUCCESS; } 我的操作 (<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>springOpenEntityManagerInViewFilter</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> <init-param> <param-name>entityManagerFactoryBeanName</param-name> <param-value>entityManagerFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>springOpenEntityManagerInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> ..... </web-app> ) 位于一个单独的 xml 上,称为 save,它包含在 Actions.xml 中。堆栈跟踪 struts.xml 其他操作效果很好。 您实际收到的投诉是Stacktraces No result defined for action actions.agenda and result input com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:376) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) com.sun.grizzly.ContextTask.run(ContextTask.java:71) com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) java.lang.Thread.run(Thread.java:722) 。 基本上,这意味着某些原因导致 Struts 认为您向其中一个属性提供了无效数据(或者验证方法添加了字段/操作错误)。 例如也许您有一个设置器,它接受一个整数,并将一个非整数值传递给它,类似的东西。 因为它无法将提供的值转换为适合 setter 的值,所以它会抱怨。 这会导致操作返回“INPUT”值,而您没有为其定义结果。 通常,这里要做的是返回保存“输入”结果之前呈现的相同表单,因为正常的 Struts 2 标签(如 No result defined for action actions.agenda and result input 或 <s:textfield>)将在相应字段上方显示字段错误。 如果您提交表单,您应该提供 <s:select> 类型的结果。所以 input
如何在Struts 2中的action类或bean中使用getText()?
有没有办法在操作类或bean中使用getText()?我无法使用 Google 搜索找到 Java 代码中的示例,但可以在 JSP 中找到它们。我的例子如下: 公共类 LoanForm 扩展
在 Eclipse e 中的 WebLogic 服务器上运行 Struts 2 项目时出现 UnsupportedClassVersionError
我正在尝试在 Eclipse 中使用 WebLogic 服务器设置基本的 Struts 应用程序。 使用基本 JSP、web.xml、struts.xml 和操作运行项目时,出现以下错误: ####<...