我尝试重定向到另一个动作并发送一个字符串参数。这工作没有问题,但如果我使用德语元音变音,我有一个编码问题。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