struts中<html:errors/>错误怎么就显示不出来呢???
提交后不管是validate验证还是Action验证错误时<html:errors/>都没有显示出来,这里我没有用propertis,但是也应该可以的吧???望大家帮忙,先谢了!!
//*************************struts-config.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="userLoginForm" type="UserLoginForm"/>
<form-bean name="userRegisterForm" type="UserRegisterForm"/>
</form-beans>
<action-mappings>
<action path="/checkUserAction"
type="CheckUserAction"
name="userLoginForm"
scope="request"
input="/index.jsp"
validate="true"
>
<forward name="success" path="/welcome.jsp"/>
<forward name="fail" path="/failed.jsp"/>
</action>
<action path="/addUserAction"
type="AddUserAction"
name="userRegisterForm"
scope="request"
input="/register.jsp"
validate="true"
>
<forward name="success" path="/welcome.jsp"/>
<forward name="fail" path="/failed.jsp"/>
</action>
</action-mappings>
<message-resources parameter="resources.application" null="true"/>
</struts-config>
//*************************index.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html:html locale="true">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>首页</title>
</head>
<body>
<p>登录</p>
<p><font color=red><html:errors/></font></p>
<html:form method="post" action="checkUserAction">
<p>用户名:
<html:text property="userName" value="" size="10"/>
<font color=red> <html:errors property="userName"/></font>
</p>
<p>密 码:
<html:password property="userPassword" value="" size="10"/>
<font color=red><html:errors property="userPassword"/></font>
</p>
<p><html:submit property="submit" value="登录"/></p>
</html:form>
<p><a href="register.jsp">注册</a></p>
</body>
</html:html>
//*************************UserLoginForm.java
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
import org.apache.struts.util.MessageResources;
public class UserLoginForm extends ActionForm {
private String userName;
private String userPassword;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName=userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword=userPassword;
}
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(userName.trim().length()<6||userName.trim().length()>10)
errors.add("userName",new ActionError("用户名填写不正确"));
if(userPassword.trim().length()<6||userPassword.trim().length()>10)
errors.add("userPassword",new ActionError("密码填写不正确"));
if(!errors.isEmpty())
errors.add("registerFailed",new ActionError("登录失败"));
return errors;
}
}
//*************************CheckUserAction.java
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.util.MessageResources;
public class CheckUserAction extends Action {
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
throws Exception {
UserLoginForm actionForm=(UserLoginForm)form;
String userName=actionForm.getUserName();
String userPassword=actionForm.getUserPassword();
CheckUser checkUser=new CheckUser();
boolean f=checkUser.check(userName,userPassword);
if(f) {
HttpSession session=request.getSession();
session.setAttribute("userName",userName);
return(mapping.findForward("success"));
}
else {
ActionMessages errors=new ActionMessages();
errors.add("loginFailed",new ActionMessage("用户名不存在或密码错误"));
saveErrors(request,errors);
return(mapping.findForward("fail"));
}
}
}
//*************************CheckUser.java
import java.sql.*;
public class CheckUser {
Connection con=null;
Statement sm=null;
ResultSet rs=null;
boolean f;
public boolean check(String userName,String userPassword) {
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/register","client","123456");
sm=con.createStatement();
rs=sm.executeQuery("select * from user where userName='"+userName+"' and userPassword='"+
userPassword+"'");
if(rs.next())
f=true;
else f=false;
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if(rs!=null) {
try {
rs.close();
}
catch(SQLException e) {
System.out.println(e);
}
rs=null;
}
if(sm!=null) {
try {
sm.close();
}
catch(SQLException e) {
System.out.println(e);
}
sm=null;
}
if(con!=null) {
try {
con.close();
}
catch(SQLException e) {
System.out.println(e);
}
con=null;
}
return f;
}
}
}
问题点数:20、回复次数:7Top
1 楼imA(男的不会,会的不男)回复于 2006-05-01 15:50:28 得分 0
有两种方法:
一
不改动jsp代码,改动java代码
把校验代码errors.add("loginFailed",new ActionMessage("用户名不存在或密码错误"));这样的代码全部改为:errors.add(org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE,new ActionMessage("XXX"));
二
不改动java代码,改动jsp代码
把jsp中的<html:errors/>改为<html:error property="userName"/><br><html:error property="userPassword"/><br><html:error property="registerFailed"/><br><html:error property="loginFailed"/>
因为<html:errors/>标签在查找的时候是查找request上下文的org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE所对应的值,这也就是第一种改法的原因,也是你代码中无法显示错误提示的原因。Top
2 楼imA(男的不会,会的不男)回复于 2006-05-01 15:53:09 得分 0
具体的楼主可以详细的看看struts的源代码,主要是校验部分的(如何将错误提示信息存入request中)和<html:errors/>标签的源代码(如何查找错误信息以及显示)Top
3 楼pandasea()回复于 2006-05-01 16:11:52 得分 0
先谢了楼上的,但是这两个方法我试了都不管用,还是什么错误也没有输出.我原来的程序不只是<html:errors/>不能显示,<html:errors property="userName"/>等其它的具体的错误也没有一条能显示出来Top
4 楼fhway(不会游泳的鱼)回复于 2006-05-03 14:01:11 得分 0
你的resources.application 进行中文格式转换了吗?Top
5 楼Michael_javavb()回复于 2006-05-05 08:39:26 得分 0
这个问题我也碰到过,就昨天,想了好久,很郁闷的说,我后来改好了,看了error标签的源码后知道原因了。
ActionMessages errors=new ActionMessages();
errors.add("loginFailed",new ActionMessage("用户名不存在或密码错误"));
这里是有问题的,其他不用改,把这两句改为:
ActionErrors errors=new ActionErrors();
errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(jsp.abc));
其实是因为有些struts版本里的error标签不支持ActionMessage的。
jsp.abc="用户名不存在或密码错误"
写入资源文件。Top
6 楼jupiter97(网际异行)回复于 2006-08-31 23:17:40 得分 0
搞了一晚上这个问题总算有结果了,不知道我的问题跟楼主的事不是一样,贴出来参考一下:
我是将web.xml中的
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResource</param-value>
</init-param>
改成:
<init-param>
<param-name>application</param-name>
<param-value>GoodTradeResource</param-value>
</init-param>
其中“GoodTradeResource”是我的.properties 文件的前缀
(如:GoodTradeResource_zh_CN.properties)
Top
7 楼imA(男的不会,会的不男)回复于 2006-09-01 10:59:30 得分 0
tmd,又是一个不结贴的,曰Top




