论坛首页 Java版 Struts

Strust2 标签 <s:select/>的疑问

浏览 528 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-07-02
我在做一个工作流的项目,以前是用struts2+jbpm做的,没有遇到这个问题,但是当我用spring来整合的时候却出现了jsp界面到Action类传的值出现了乱码。
我的jsp界面:checkApprove.jsp:
<%@ page language="java" pageEncoding="UTF-8"
	contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
...
<s:form action="processApproveResult">
	<s:if test="#userRole==2">
	   <s:select name="result" label="审核意见"
	          list="{'Info审核同意','info审核不同意','重新填写信息'}">
	   </s:select>
	</s:if>
	<s:elseif test="#userRole==3">
	   <s:select name="result" label="审核意见" 
                   list="{'最后审核同意','最后审核不同意'}">
            </s:select>
	</s:elseif>
	<s:else>

	</s:else>
	<s:textfield name="memo" label="备注"></s:textfield>
	<s:submit value="提交" />
	<s:reset value="重置" />
</s:form>...

对应的Action类是:ProcessApproveResult.java
public class ProcessApproveResult implements Action, ModelDriven {

	public Log log = LogFactory.getLog(ProcessApproveResult.class);
	private Approve approve = new Approve();
      public String execute() throws Exception {
     ...
      //为什么下面这行得到result变量是乱码?
      String result = approve.getResult();       .... 
      }

     public Approve getModel() {
		return approve;
	}
}

其中Approve类是对请求的封装:
public class Approve implements java.io.Serializable {
       
         private String result;
	
	private String memo;
//省略get和set

}


为什么在我的那个红色代码行得到是乱码啊,我的jsp界面用了UTF-8,我的整个项目也是UTF-8的,有谁遇到过啊,难道我自己得写一个过滤类,对请求的参数再设置一下格式?
   
最后更新时间:2008-07-05
自己写个过滤器
   
0 请登录后投票
最后更新时间:2008-07-05
提交要过滤的!
   
0 请登录后投票
最后更新时间:2008-07-05
转至:http://www.family168.com/tutorial/jsp/html/jsp-ch-07.html

批量设置请求编码
编码问题会不会成为中国人学java的标志呢?

通过之前的讨论第 2.2.2 节 “POST乱码”,我们知道为了避免提交数据的乱码问题,需要在每次使用请求之前设置编码格式。在你复制粘贴了无数次request.setCharacterEncoding("gb2312");后,有没有想要一劳永逸的方法呢?能不能一次性修改所有请求的编码呢?

用Filter吧,它的名字是过滤器,可以批量拦截修改servlet的请求和响应。

我们编写一个EncodingFilter.java,来批量设置请求编码。

package anni;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

    public void init(FilterConfig config) throws ServletException {}

    public void destroy() {}

    public void doFilter(ServletRequest request,
            ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        request.setCharacterEncoding("gb2312");
        chain.doFilter(request, response);
    }

}
       
在此EncodingFilter实现了Filter接口,Filter接口中定义的三个方法都要在EncodingFilter中实现,其中doFilter()的代码实现主要的功能:为请求设置gb2312编码并执行chain.doFilter()继续下面的操作。

与servlet相似,为了让filter发挥作用还需要在web.xml进行配置。

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>anni.EncodingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
       
filter标签部分定义使用的过滤器,filter-mapping标签告诉服务器把哪些请求交给过滤器处理。这里的/*表示所有请求,/表示根路径,*(星号)代表所有请求,加在一起就变成了根路径下的所有请求。

这样,所有的请求都会先被EncodingFilter拦截,并在请求里设置上指定的gb2312编码。

例子在lingo-sample/07-01目录下,这次我们不需要在test.jsp中为请求设置编码也可以得到正常的中文参数了,EncodingFilter圆满的完成了它的工作。
   
0 请登录后投票
最后更新时间:2008-07-07
在服务器配置文件里改下
   
0 请登录后投票
论坛首页 Java版 Struts

跳转论坛:
JavaEye推荐