************************
* Question Description *
********************************************************************************
* Key Words: JSP, Struts, html:link, Hashmap, 中文问题 *
********************************************************IDE  : Eclipse 3.2 + MyEclipse 5.0
AppServer  : JBoss (Use EJB)
Platform  : WinXP_PRO_EN_SP2_DELL_OEM (Chinese Language Installed)
Frame : JSP + Struts + Hibernate (MVC)********
* Task * 
********
Step 1st: 从首页(index.html)点击链接(MyPageAction.do),响应该Action后,转(mapping.findForward)到myPage.jsp页面.这次由于是从html中提交,因此myPage.jsp页面显示的是空值.Step 2nd: 点击页面(myPage.jsp)上的一个按钮("提交"),再次使得Action响应一次,由于这次是提交了表单(Get方式),因此myPage.jsp页面正常相应了结果值.与此同时,为了下个步骤的进行,MyPageAction还将表单的值保存在了一个Hashmap集中.Step 3rd: 点击页面(myPage.jsp)上的一个链接("下一页"),再次相应Action,由于这次action得到的表单参数为乱码,因此结果也出不来,导致forward到jsp以后无结果.流程如下:
index.html (提交空值)--> MyPageAction.do -->myPage.jsp (按钮提交表单)--> MyPageAction.do --> myPage.jsp (链接提交表单) --> MyPageAction.do (乱码) --> myPage.jsp************
* Question *
************
症状:
After Step 1st: http://localhost:8080/MyWeb/MyPageAction.do   (未得到输入时的URL)
After Step 2nd: http://localhost:8080/MyWeb/MyPageAction.do?name=%B3%A4%C9%B3 (输入"长沙",按钮提交后的URL)
After Step 3rd: http://localhost:8080/MyWeb/MyPageAction.do?page=1&name=%E9%95%BF%E6%B2%99 (按链接提交后的URL,值明显不同)问题:
如何使得链接提交给action的值和按钮提交的值保持一致? 或者还有更有效的解决方案?
************************
* Details in Core Code *
************************---------  JSP Page: myPage.jsp -----------------------<%@ page contentType="text/html; charset=GBK"%>
<%@ taglib uri="/tags/struts-bean" prefix="bean"%>
<%@ taglib uri="/tags/struts-html" prefix="html"%><html>
  <head>
     <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
     ... ...
  </head>
  <body>
     <html:form method="GET" action="MyPageAction.do">
... ...
        <html:text property="name"></html:text>  <!-- text域,输入中文的地方-->
        ... ...
        <html:submit>提交</html:submit>  <!-- 按钮,正常提交表单的地方-->
        ... ...
        <html:link action="MyPageAction" name="param" paramId="page" aramName="nextPage">
    下一页                       <!-- 链接,问题所在地-->
</html:link>
        ... ...
     </html:form>
  </body>
</html>-------------------------------------------------------
---------  Form : MyPageForm.java ---------------------  ... ...
public class MyPageForm extends ActionForm {
... ... //表单中还有其他参数
private String name;
... ...
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
... ...
}-------------------------------------------------------
---------  Action : MyPageAction.java -----------------import java.util.HashMap;
... ...
public class MyPageAction extends Action {
... ...
public ActionForward execute(ActionMapping mapping, ActionForm srcForm,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
... ...
MyPageForm form = (MyPageForm) srcForm;
HttpSession session = request.getSession();
HashMap param = new HashMap();  // 新建一个HashMap变量,用来存储多个参数值
... ...
String strName = null;
if (form.getName() != null && !form.getName.equals("")) {
strName = new String(request.getParameter("name").getBytes(
"ISO-8859-1"), "GB2312");  // 若name参数非空,则换为GB2312格式
}
param.put("name", strName); //将strName值存储到name参数中
form.setName(strName); // 为了转到myPage.jsp页面后name的text域显示成中文,必须更新form中的name值
... ...
String strPage = request.getParameter("page"); // 获得page参数
int page = strPage == null ? 1 : Integer.parseInt(strPage);
... ...
request.setAttribute("nextPage", new Integer(page + 1));
request.setAttribute("param", param); // 保存所有的参数后,将param对象存储起来
return mapping.findForward("result"); // 转到myPage.jsp页面
}      
}-------------------------------------------------------***********
* Related *
***********
偶在jsp页面采用下面的代码,可以使得链接提交的name值符合Action的编码方式:
<a href='?name=<bean:write name="name"/>&page=<bean:write name="nextPage" />'>
   下一页
</a>
偶认为,前面代码之所以出错在于:
<html:link action="MyPageAction" name="param" paramId="page" aramName="nextPage">
   下一页         <!-- 这句话中的param对象没有解析成适当的编码格式,或许是解析过度了-->
</html:link>
不知道是不是这样的问题.
因为jsp页面中有多个参数要通过链接传递,所以还是希望能用html:link的方式一次性解决!