在ActionForm中使用ActionErrors、然后配置好.properties文件、在页面中用<html:errors/>显示出来都没有问题,但是在Action中处理异常时便无法显示在前台。于是我使用了ActionMessages,结果还是无法显示。代码如下
1.loginAction:
public class loginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ActionMessages errors = new ActionMessages();
boolean isValid=false;

isValid = valid(request,(loginActionForm)form);

if(isValid){
form.reset(mapping, request);
return mapping.findForward("success");
}else {
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("login.message.failed"));
form.reset(mapping, request);
return mapping.findForward("error");
}
}

private boolean valid(HttpServletRequest request,loginActionForm loginForm){ boolean b = false;
ActionErrors errors = new ActionErrors();

try {
Context ctx=new InitialContext(); 
Connection conn=null; 
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); 
conn=ds.getConnection();
String userid = loginForm.getUserid();
String password = loginForm.getPassword();
String sqlStr = new String("select * from UserInfo where userid=? and password=? and flag='1'");
PreparedStatement preSQLSelect = conn.prepareStatement(sqlStr,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

userid = new String(userid.getBytes("ISO-8859-1"));
password = new String(password.getBytes("ISO-8859-1"));
preSQLSelect.setString(1,userid);
preSQLSelect.setString(2,password);
ResultSet rs = preSQLSelect.executeQuery();

if(rs.next()){
b = true;
request.getSession().setAttribute("id",rs.getString("id"));
request.getSession().setAttribute("userid",rs.getString("userid"));
request.getSession().setAttribute("username",rs.getString("username"));
request.getSession().setAttribute("password",rs.getString("password"));
}

rs.close();
preSQLSelect.close();
conn.close();

} catch (SQLException e) {
errors.add("SQLError",new ActionMessage("SQLError"));
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
errors.add("CharacterSetChangeError",new ActionMessage("CharacterSetChangeError"));
e.printStackTrace();
} catch (NamingException e) {
errors.add("NamingDataseError",new ActionMessage("NamingDataseError"));
e.printStackTrace();
}

return b;
}}
2. .properties文件:
ApplicationResources_zh_CN.properties
# login action
login.message.failed=\u767b\u5f55\u5931\u8d25\uff01\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef\uff01
ApplicationResources.properties
# login action
login.message.failed=failed to login
3. JSP文件
第一种显示:
<html:messages message="true" id="msg"> 
<c:out value="${msg}"/>
</html:messages>
无法显示
第二种显示:
<html:errors/>
也无法显示
第三种显示:
<html:errors property="org.apache.struts.action.GLOBAL_MESSAGE"/>
还是无法显示
请问怎么办?

解决方案 »

  1.   

    Action方法中:
    saveMessage(request,"页面要显示的消息");Action的调用的方法,可以写真Action实现类的父类 BaseDispatchAction 中:public ActionMessages saveMessage(HttpServletRequest request, String key) {
          ActionMessages messages = new ActionMessages();
          return saveMessage(messages, request, key);
    }protected ActionMessages saveMessage(ActionMessages messages,
           HttpServletRequest request, String key) {      messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(key));
          saveMessages(request, messages);
          return messages;
    }页面:<html:messages id="msg" message="true"><bean:write name="msg"/></html:messages>