問題文
struts アクションが JSP ページにリダイレクトされている間に、いくつかの追加パラメーターを送信したいと考えています。サイズが小さいパラメータが 1 つまたは 2 つの場合は、それらをクエリ パラメータの形式で渡すことができますRequest.jsp?param1=hello
。
私が試したこと
私はこのサイトをチェックアウトし、それに応じて行いました。これは私のstruts.xml
ファイルです:
<struts>
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="100000000" />
<!-- <constant name="struts.action.excludePattern" value="/service" /> -->
<package name="default" extends="struts-default,json-default"
namespace="/">
<action name="request"
class="com.ModifyRequest">
<result name="success" type="redirect">Request.jsp?orderId=123
</result>
<result name="failure" type="redirect">Request.jsp?orderId=123
<param name="failureMessage">${failureMessage}</param>
<param name="status">${status}</param>
</result>
</action>
</package>
</struts>
そして、これは私のアクションクラスです:
public class ModifyRequest extends ActionSupport implements Parameterizable{
private Map<String, String> params;
private String failureMessage;
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getFailureMessage() {
return failureMessage;
}
public void setFailureMessage(String failureMessage) {
this.failureMessage = failureMessage;
}
@Override
public void addParam(String arg0, String arg1) {
// TODO Auto-generated method stub
//params.put(arg0, arg1);
}
@Override
public Map<String, String> getParams() {
// TODO Auto-generated method stub
return params;
}
@Override
public void setParams(Map<String, String> params) {
// TODO Auto-generated method stub
Map<String,String> paramMap = new HashMap<String, String>();
paramMap.put("failureMessage", "failureMessage"); // temporary value
paramMap.put("status", "status"); // temporary value
this.params = paramMap;
}
@Override
public String execute() throws Exception {
if(false){
this.status = "success..";
this.failureMessage = "success message";
return SUCCESS;
} else{
this.status = "failure";
this.failureMessage = "failure message..";
return "failure";
}
}
}
私のJSPファイルの関連部分:
<script type="text/javascript">
alert('<%=request.getParameter("failureMessage")%>');
alert('<%=request.getParameter("status")%>');
/*
// i have written an hidden element setting this value, so i get the desired output.
alert('<%=request.getParameter("userId")%>');
*/
<form action="request" method="post">
<input type="hidden" name="userId" id="userId" value= "joshi">
</form>
Action クラスの userId の getter と setter は必須ではなかったので言及していないので無視してください。
browser で次の例外をスローします。
Struts Problem Report
Struts has detected an unhandled exception:
Messages:
File: org/apache/struts2/dispatcher/ServletRedirectResult.java
Line number: 257
Stacktraces
java.lang.NullPointerException
org.apache.struts2.dispatcher.ServletRedirectResult.isPathUrl
(ServletRedirectResult.java:257)
org.apache.struts2.dispatcher.ServletRedirectResult.doExecute(ServletRedirectResult.java:177)
<param> elemnets
要素から削除するresult
と、例外はスローされませんが、問題は解決されません。
手伝ってくれませんか。