如果我有一个 url:www.myurl.com/books并希望能够<s:url>对作者和年份创建新的过滤:www.myurl.com/books/Sartre/1942通过将Sartre和1942作为参数传递给操作类,该操作类将呈现具有适当结果的书籍页面。在Struts2中如何做到这一点?
我已经准备好了后端逻辑,所以如果:
www.myurl.com/books。www.myurl.com/books/Sartre/1942
即使在 get 请求加载页面后,也会在地址栏中显示动态呈现的 URL (即www.myurl.com/books,不是 )。我正在研究 struts2 Web 应用程序,我正在使用令牌拦截器处理 CSRF 漏洞。
我所做的是成功和错误,我会将用户重定向到同一页面,但会出现操作错误或成功消息。
<action name="saveApplicationForm" class="action.ApplicationFormAction"
method="saveApplicationForm">
<interceptor-ref name="token" />
<result name="invalid.token" type="tiles">applicationForm.tiles</result>
<result name="input" type="tiles">applicationForm.tiles</result>
</action>
Run Code Online (Sandbox Code Playgroud)
没有令牌/令牌会话拦截器一切正常,但是当我使用拦截器时,我收到了 NullPointerException。
堆栈跟踪
java.lang.NullPointerException: null
at action.ApplicationFormAction.saveApplicationForm(ApplicationFormAction.java:218) ~[ApplicationFormAction.class:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_67]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_67]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_67]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_67]
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) [xwork-core-2.3.16.3.jar:2.3.16.3]
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289) [xwork-core-2.3.16.3.jar:2.3.16.3]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) [xwork-core-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.interceptor.TokenInterceptor.handleValidToken(TokenInterceptor.java:193) [struts2-core-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.interceptor.TokenInterceptor.handleToken(TokenInterceptor.java:154) [struts2-core-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.interceptor.TokenInterceptor.doIntercept(TokenInterceptor.java:142) [struts2-core-2.3.16.3.jar:2.3.16.3]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) [xwork-core-2.3.16.3.jar:2.3.16.3]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) [xwork-core-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) [struts2-core-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562) [struts2-core-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) [struts2-core-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) [struts2-core-2.3.16.3.jar:2.3.16.3] …Run Code Online (Sandbox Code Playgroud) java struts2 csrf-protection interceptorstack struts2-interceptors
我是新来的Struts.我Struts2从它的网站上下载了.现在我想struts-html.tld在我的一个文件中引用JSP文件.
但是当我struts-taglib.jar在下载的struts中查找文件时,我没有找到它.
我是这个框架的新手.在我的页面中,我有一个下拉列表和一个文本框.如果出现任何错误,则不再提供丢弃.如何解决这个问题.
struts.xml中:
<action name="*DropDown"
class="com.mmm.ehspreg2.web.action.DropdownListAction" method="{1}" />
<action name="addComment" method="add"
class="com.mmm.ehspreg2.web.action.product.CommentAction">
<result name="input" type="tiles">addComment</result>
<result name="error" type="tiles">addComment</result>
<result name="success" type="tiles">reloadList</result>
</action>
Run Code Online (Sandbox Code Playgroud)
页:
<s:form action="addComment" method="POST">
<s:action name="getDivisionsDropDown" id="actFetchDivisions" executeResult="true"></s:action>
<s:action name="getPropretyTypesDropDown" id="actFetchPropretyTypes" executeResult="true" ></s:action>
<table cellspacing="0" cellpadding="3" width="100%" border="0">
<tr>
<td class="error"><s:actionerror /><s:actionmessage /> <s:fielderror></s:fielderror></td>
</tr>
<tr>
<td class="bdyRecords"><s:label>
<s:text name="common.division" />
</s:label></td>
<td class="bdyRecords" style="width: 1px">:</td>
<td class="bdyRecords"><s:if
test="#actFetchDivisions.lstEntities.size()>0">
<s:select cssClass="drop" list="#actFetchDivisions.lstEntities"
cssStyle="width:200px" tooltip="divisionName"
id="select_division" listKey="id" name="comment.divisionId"
listValue="value"></s:select>
</s:if></td>
</tr>
<tr>
<td class="bdyRecords"><s:label>
<s:text name="common.propertytype" />
</s:label></td>
<td class="bdyRecords" …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码.
public class SampleAction {
private String[] sampleArray1 = new String[]{"item1","item2","item3"};
private String[] sampleArray2 = new String[]{"a","b","c"};
private List lst = new ArrayList();
lst.add(1)
lst.add(2)
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试在JSP中访问它时,上面的哪些属性将在值栈中?它是否像普通堆栈一样工作,即继续推送它读取的任何属性?
我在数据库中有一个变量映射,我想在网页上显示详细信息,前端是struts2.我试过这个
<html:iterator value="fields" id="field">
<html:textfield name="#field.value" key="#field.value" label="#field.key"/>
</html:iterator>
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,我怎么能轻松获得密钥名称,所以我可以有这样的代码
想法是显示如下
Name: [ ]
Random: [ ]
Something: [ ]
Run Code Online (Sandbox Code Playgroud)
作为表单中的文本字段...
我怎么能这么做呢?
可以为同一个模块创建多个struts配置文件吗?
我试图为不同的应用程序/模块创建配置文件,并将其包含struts.xml在Struts 2的主文件中,但有人能告诉我如何为同一个应用程序创建多个配置文件吗?
突然之间,我们在weblogic Server中看到了这个错误日志.
ERROR | org.apache.struts2.components.UIBean [486] | error when rendering
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at weblogic.servlet.internal.ChunkOutput.writeChunkTransfer(ChunkOutput.java:577)
at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:548)
at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:436)
at weblogic.servlet.internal.CharsetChunkOutput.flush(CharsetChunkOutput.java:298)
at weblogic.servlet.internal.ChunkOutput$2.checkForFlush(ChunkOutput.java:657)
at weblogic.servlet.internal.CharsetChunkOutput.write(CharsetChunkOutput.java:200)
at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:148)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:151)
at weblogic.servlet.internal.WLOutputStreamWriter.writeBytes(WLOutputStreamWriter.java:166)
at weblogic.servlet.internal.WLOutputStreamWriter.flushBuffer(WLOutputStreamWriter.java:210)
at weblogic.servlet.internal.WLOutputStreamWriter.write(WLOutputStreamWriter.java:130)
at weblogic.servlet.internal.WLOutputStreamWriter.write(WLOutputStreamWriter.java:99)
at weblogic.servlet.internal.DelegateChunkWriter.write(DelegateChunkWriter.java:113)
at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:124)
at weblogic.servlet.jsp.JspWriterImpl.write(JspWriterImpl.java:246)
at org.apache.struts2.views.freemarker.tags.CallbackWriter.write(CallbackWriter.java:67)
at java.io.Writer.write(Writer.java:192)
at java.io.Writer.write(Writer.java:157)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:196)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:196)
at freemarker.core.Environment.visit(Environment.java:233)
at freemarker.core.UnifiedCall.accept(UnifiedCall.java:116)
at freemarker.core.Environment.visit(Environment.java:196)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:196)
at freemarker.core.Environment.process(Environment.java:176)
at freemarker.template.Template.process(Template.java:232)
at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:168) …Run Code Online (Sandbox Code Playgroud)