struts表单的中文乱码问题
小菜刚刚接触用struts进行web开发,发现struts在处理form的时候对中文的支持不是很好
这是我的action代码
package ch03.hello;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;
import org.apache.commons.beanutils.PropertyUtils;
public final class HelloAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
System.out.println("person="+request.getParameter("person"));
String action = request.getParameter("action");
if (action == null) {
return (mapping.findForward("SayHello"));
}
ActionErrors errors = new ActionErrors();
String person = (String)
PropertyUtils.getSimpleProperty(form, "person");
String badPerson = "Atilla the Hun";
if (person.equals(badPerson)) {
errors.add("person",
new ActionError("ch03.hello.dont.talk.to.atilla", badPerson ));
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
HelloModel hm = new HelloModel();
hm.setPerson(person);
hm.saveToPersistentStore();
request.setAttribute( Constants.HELLO_KEY, hm);
request.removeAttribute(mapping.getAttribute());
return (mapping.findForward("SayHello"));
}
}
请问到底是在什么地方出了岔子呢?是ActionBean中还是Action中?还是JSP中?
再问问,在Action中,是如何和取得VIEW中用户输入的参数的?是从form中来还是从request中?该如何取得?
小弟不胜感激,谢谢~
问题点数:20、回复次数:6Top
1 楼humanity(城市边缘的狼)回复于 2005-11-13 02:40:03 得分 15
struts-config.xml
中有个
<struts-config>
<controller processorClass=" 你的RequestProcessor处理器类名" />
</struts-config>
public class Processor extends RequestProcessor{
public void process(...){ // 比较健忘... 想不起来.
request.setCharacterEncoding("GB2312");
super.process(request,response);
}
}
在这里加上了请求处理器类处理编码问题就能赶在 ActionForm 填充之前设置编码, 如果在 action 类中设置编码则已经过了 ActionForm 填充的阶段, 所以 form 中依然是乱码.
到 http://struts.apache.org 下载源码看看.Top
2 楼humanity(城市边缘的狼)回复于 2005-11-13 02:41:52 得分 0
还可以用 Servlet 过滤器, 如果你用一些好点的IDE , 都有创建Servlet 过滤器向导.Top
3 楼oldmanpushcart(上善若水)回复于 2005-11-13 07:54:26 得分 0
谢谢,netbeans有servlet过滤器吗?
eclipse我不大会用Top
4 楼rosifox(下着鱼的天)回复于 2005-11-13 07:56:18 得分 5
原因一:
请求是通过GET而不是POST,解决,把JSP/HTML中的FORM的METHOD改为POST
原因二:
见楼上,方法,加一个ServletFilter,设置request.setCharacterEncoding("GBK");
Top
5 楼oldmanpushcart(上善若水)回复于 2005-11-13 08:03:31 得分 0
哎~~在用struts以前,我是一个单纯的JSP/Servlet CodeWriter 每次上论坛看到ServletFiter的帖子都不明白到底要来干什么,现在我是终于明白了~~
谢谢大家Top
6 楼oldmanpushcart(上善若水)回复于 2005-11-13 08:14:59 得分 0
顺便问一下,大家有什么好的Struts开源项目吗?我想下一个来学习一下~
再次谢谢大家~!Top




