我正在开发一个登录函数,它根据存储在DB中的数据对用户进行身份验证,当我尝试在下一个要显示的JSP上显示登录错误消息时,即使登录信息不匹配,也不显示该消息
struts.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="default" extends="struts-default" namespace="/">
<action name="login" class="package1.LoginAction">
<result name="success">MainPage.jsp</result>
<result name="error">Login.jsp</result>
</action>
</package>
</struts>
ApplicationResources.properties
label.username=User Name
label.password=Password
label.login=Login
label.domain=Select Domain
error.login=Invalid Username/Password. Please try again.
的Login.jsp
<table border="0" align="center">
<tr><s:actionerror /></tr>
</table>
<s:form action="login.action" method="post">
<table border="0" align="center">
<tr><s:textfield name="uid" key="label.username" size="20" /></tr>
<tr><s:password name="psw" key="label.password" size="20" /></tr>
<tr><s:select name="domain"
key="label.domain"
headerKey="1"
headerValue="-- Please Select --"
list="#{'01':'Tutor','02':'Student'}" /></tr>
<tr><s:submit method="execute" key="label.login" align="center" /></tr>
</table>
</s:form>
LoginAction.java
try {
Class.forName("com.informix.jdbc.IfxDriver");
conURL = "jdbc:informix-sqli://*********/fxg:INFORMIXSERVER=" +
"sgdbuat11;user=*****;password=******";
conn = DriverManager.getConnection(conURL);
stmt = conn.createStatement();
} catch (Exception e) {
System.out.println(e.getMessage());
}
stmt = conn.createStatement();
String qstr = "SELECT * FROM tutor";
rset = stmt.executeQuery(qstr);
int count = 0;
String msg = "";
while (rset.next()) {
String username = rset.getString("uid");
if (this.uid.equals(username)) {
count++;
String password = rset.getString("psw1");
if (this.psw.equals(password)) {
msg = "success";
} else {
msg = "wrongpsw";
}
}
}
if (count == 0) {
return "error";
} else if (msg == "wrongpsw") {
return "error";
} else {
return "success";
}
答案 0 :(得分:1)
我没有看到你使用密钥error.login
所以你如何期望struts显示它?您需要自己输入错误消息,例如在你的行动中致电addActionError("your message here")
。
答案 1 :(得分:0)
我基本上无法看到你添加addActionError
的位置,如果你想设置任何这样的动作级别错误,只需要设置它们就可以调用addActionError()或ActionMessage,而不是你的jsp页面ypu需要使用<s:actionerror/>
或<s:actionmessage/>
yuo需要在你的动作类中设置类似的内容
if (count==0)
{
addActionError("Invalid Username/Password. Please try again");
return "error" ;
}
else if (msg=="wrongpsw"){
addActionError("Invalid Username/Password. Please try again");
return "error";
}
else{
return "success";
}
另外,总是更好地检查jsp上的堆栈中是否存在任何错误
<s:if test="hasActionErrors()">
<table border="0" align="center">
<tr><s:actionerror/></tr></table>
</s:if>
希望这会有所帮助