-1

問題文

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と、例外はスローされませんが、問題は解決されません。

手伝ってくれませんか。

4

2 に答える 2

0

これは、@Andreaによって提供された回答に追加され、正常に機能します。理解を深めるために、追加のリファレンスを提供したかっただけです。

これは私のJSPでした(質問のように):

<script type="text/javascript">

alert('<%=request.getParameter("failureMessage")%>');
alert('<%=request.getParameter("status")%>');

<form action="request" method="post">
   <input type="hidden" name="userId" id="userId" value= "joshi">
</form>

使用request.getParameter()すると、クエリ パラメータとして送信される HTTP リクエスト パラメータが返されます。一方、asrequest.getAttribute()は、サーバ側、つまりサーブレットで設定された値を返します。

request.getParameter()は文字列オブジェクトのみを返しますが、 asrequest.getAttribute()はオブジェクトを返します。任意の型にすることができます。

この質問に対する別の解決策はrequest.getAttribute()、JSP で使用してパラメータまたはプロパティの値を取得することです。Action クラスにインターフェイスを実装する必要Parameterizableはなく、プロパティとそのgettersおよび を提供するだけsettersです。

<script type="text/javascript">

alert('<%=request.getAttribute("failureMessage")%>');
alert('<%=request.getAttribute("status")%>');

<form action="request" method="post">
   <input type="hidden" name="userId" id="userId" value= "joshi">
</form>

それは問題に対する追加の解決策です。

于 2013-09-26T05:39:17.677 に答える