我嘗試重定向到另一個動作併發送一個字符串參數。這工作沒有問題,但如果我使用德語元音變音,我有一個編碼問題。Struts 2的參數編碼問題時重定向到另一個動作
這裏是我的代碼: 首先行動有getter和setter現場消息。在動作中,我設置了字符串。
private String message;
public String action1()
{
message = "ö";
return SUCCESS;
}
第二個動作也有一個帶有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消息,一切正常。編碼是正確的。 如果我重定向到另一個動作的消息字段設置者設置了錯誤的formattet字符串「ö」。 我找不到解決方案。有人可以幫我嗎?
自己的過濾器:
<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引起的。
嗨,謝謝你的回答。這似乎是正確的解決方案。但它不起作用。嘗試這個我有一個印象,可能不是struts2是債務,但是Spring Security。因爲我嘗試使用自己的Charakterencoding-Filter和org.springframework.web.filter.CharacterEncodingFilter。兩種解決方案都不起作用。我將過濾器代碼寫入我的問題。也許我犯了錯誤。 – Rafael 2011-01-25 16:38:40
這不應該是問題。當通過redirectAction重定向一個動作時,我不認爲考慮到了web.xml,或者Spring Security。我的猜測是,這與攔截器將某個動作的價值轉移到下一個動作有關。也許是一個錯誤? – Akku 2011-01-26 12:59:27
根據http://struts.apache.org/2.0.14/docs/redirect-action-result.html,redirectAction將「將瀏覽器重定向到調用指定操作的URL」。如果它重定向瀏覽器,它將創建一個全新的請求,而不僅僅是通過攔截器,它會再次通過web.xml。 – 2011-01-26 14:48:09