2011-01-25 9 views
6

私は別のアクションにリダイレクトし、文字列パラメータを送信しようとしています。これは問題なく動作しますが、私がドイツ語のウムラウトを使用している場合は、コーディングの問題があります。別のアクションにリダイレクトする際のStruts 2のパラメータコーディングの問題

ここに私のコードです: 最初のアクションは、getterとsetterのフィールドメッセージを持っています。私は文字列を設定します。

private String message; 
public String action1() 
{ 
    message = "ö"; 
    return SUCCESS; 
} 

第2のアクションにはgetterとsetterのフィールドメッセージもあります。

private String message; 

Struts.xml両方のアクション

<action name="action" method="action1" class="de.samba.control.actions.Action1"> 
<result name="success" type="redirectAction"> 
<param name="actionName">action2</param> 
<param name="message">${message}</param> 

<action name="action2" class="de.samba.control.actions.Action2"> 
<result name="success">/pages/showMessage.jsp</result> 

の定義と私は、リダイレクトを使用してドントとJSPのメッセージを表示した場合、すべて正常に動作します。コーディングは正しいです。 別のアクションにリダイレクトすると、メッセージフィールドの設定者が間違った書式設定文字列 "¶"を設定しました。 解決策が見つかりません。誰かが私を助けてくれる?

自身のフィルタ:

<filter> 
    <filter-name>CharacterEncodingFilter</filter-name> 
    <filter-class>de.samba.control.CharacterEncodingFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>CharacterEncodingFilter</filter-name> 
    <url-pattern>*.action</url-pattern> 
</filter-mapping> 

フィルタークラス

public class CharacterEncodingFilter implements Filter { 

    @Override 
public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain next) throws IOException, ServletException 
{ 
    String encoding = request.getCharacterEncoding(); 
    if (encoding == null || encoding.length() == 0) 
    { 
     request.setCharacterEncoding("UTF-8"); 
    } 
    encoding = request.getCharacterEncoding(); 
    next.doFilter(request, response); 
} 
} 

それから私は、このフィルタを試してみました:

<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 

これはあまりにも動作しません。誰かがこの問題を知っていますか?多分、それはSpring Securityによって引き起こされるかもしれません。

答えて

5

問題は、Tomcatの問題ではなく、支柱の問題でした。 解決策は、ConnectorのURIEncodingをserver.xmlに "utf-8"に設定することです。 http://struts.apache.org/2.0.14/docs/how-to-support-utf-8-uriencoding-with-tomcat.html

+0

こんにちはラファエル。私は同じ問題に直面しています(最初はFFで、IEではうまくいきませんでした)。あなたのソリューションに従った後、IEでうまく動作しますが、FFでこれ以上動作しません。私はこれを解決するために手伝って..非常に非常に緊急..事前に感謝! –

0

それはあなたが持っている同じ問題であるように、この質問にはなります

Struts2 request character encoding

+0

こんにちは、ありがとうございます。これは適切な解決策に見えました。しかし、それは動作しません。これを試してみると、おそらくstruts2ではないという印象がありますが、Spring Securityでは負債です。私は独自のCharakterencoding-Filterとorg.springframework.web.filter.CharacterEncodingFilterを使って試しています。両方のソリューションが動作しません。私は質問にフィルターコードを書いています。多分私は間違いを犯しました。 – Rafael

+0

これは問題ではありません。 redirectActionでアクションをリダイレクトするとき、私はweb.xmlが考慮されていないと思います。それともSpring Securityです。私の推測では、あるアクションから次のアクションに値を転送するインターセプタと何か関係があります。バグかもしれない? – Akku

+0

http://struts.apache.org/2.0.14/docs/redirect-action-result.htmlによると、redirectActionは "指定されたアクションを呼び出すURLにブラウザをリダイレクト"します。ブラウザをリダイレクトしている場合は、インターセプタを経由するのではなく、まったく新しいリクエストを作成しており、web.xmlを再び通過します。 –

0

あなたのセッションでメッセージ変数を保存してみてください。また、Webアプリケーションでは、1つのアクションから別のアクションに情報を渡すために推奨される方法は、セッションを使用することです。

他の何かが失敗した場合、私はハッキーの方法があると思います。結果を通常のWebページ(jsp)に公開することができます。そのメッセージ値を入力要素に入れます。その入力要素内の値を自動的に提出するjavascriptを作成します。しかし、推奨されません。

+0

それは当てはまりません。あるアクションから別のアクションへのサーバー側のリダイレクトが可能でなければならず、最初のアクションでユーザーにメッセージを受け取る必要がある場合、フォームデータを取得してDBおよびrenderProfilePageに配置するuserEnteredData.action .actionには、ページをレンダリングするために必要なロジックがありますが、セッションを使用する必要はありません。セッションは、ステートレスプロトコルによる要求間の状態保持のために存在します。 – Akku

1

たぶん、問題は(アクションの呼び出しを作る)URLが生成される方法です。たとえば、URLの世代が次のような場合は、attribute escapeにご注意ください。

<s:url namespace="/" action="recursoNuevo" var="recursoNuevo" > 
    <s:param name="contextPath"> 
     <s:property value="contextPath" escape="false"/> 
    </s:param> 
    </s:url> 
関連する問題