加载登录页面时,输入文本框显示#{ad.userid}
。当我删除它并输入id和pwd并单击提交按钮时,将调用login方法,但userid属性在bean中给出null值。怎么会发生这种情况,我该如何解决?
以下是login.jsp
:
<%@ page contentType="text/html"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<html>
<h:form>
<h:outputText value="Login"/>
<h:inputText value="#{ad.userid}" id="log" required="true"/>
<h:outputText value="Password" />
<h:inputSecret id="pw" value="#{ad.password}" required="true"/>
<h:commandButton value="submit" action="#{ad.login}"/>
</h:form>
</body>
</html>
</f:view>
这是bean的动作方法。登录成功地提前完成了。所有数据库连接都在构造函数中设置。
public String login() {
ResultSet rs;
try {
System.out.println(userid); // this is giving null
String s = "select id from slogin where id='" + userid + "'";
System.out.println(s);
rs = st.executeQuery(s);
if (rs.next()) {
String loginid = rs.getString(1);
if (userid.equals(loginid)) {
id = loginid;
return "studhome";
}
} else {
System.out.println("error");
}
} catch(Exception e) {
}
}
Getter和setter方法:
public void setpassword(String pass) {
this.password = pass;
}
public String getpassword() {
return password;
}
public void setuserid(String uid) {
this.userid = uid;
}
public String getuserid() {
return userid;
}
答案 0 :(得分:1)
请花点时间编辑您的问题,使用StackOverflow提供的格式代码工具正确格式化。如果使用符号“0101010101”的按钮,则会出现大括号。
答案:
变化:
public void setuserid(String uid)
到
public void setUserid(String uid)
还有:
public void setpassword(String pass)
到
public void setPassword(String pass)
看看Java Naming Conventions,JSF依赖它们来访问托管bean的属性。
顺便说一句,尝试将您的支持bean设置为Session
范围以查看它是否有效,以丢弃其他问题
答案 1 :(得分:0)
我不确定这是否有用 - 1)在getter和setter中添加debug(sysouts)语句,并使用pakore所说的命名约定(更好的是你可以让eclipse生成getter和setter)。
2)尝试编写一个Phaselistener,看看是否发生了jsf生命周期的所有应用请求和更新模型阶段。