Java 如何在JSF中保持登录值
这是我在index.java中的代码Java 如何在JSF中保持登录值,java,jsf,web-applications,Java,Jsf,Web Applications,这是我在index.java中的代码 public class index{ static final String DATABASE_URL = "jdbc:mysql://localhost:3306/try?zeroDateTimeBehavior=convertToNull"; Connection con; Statement stmt; ResultSet rs; PreparedStatement pstmt; private String id; private String
public class index{
static final String DATABASE_URL = "jdbc:mysql://localhost:3306/try?zeroDateTimeBehavior=convertToNull";
Connection con;
Statement stmt;
ResultSet rs;
PreparedStatement pstmt;
private String id;
private String password;
private String message;
private String action;
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getMessage() {return message;}
public String getPassword() {return password;}
public void setPassword(String password) {this.password = password;}
public String login(){
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/try?user=root&password=123");
String sql = "Select * FROM personnel WHERE pID =? AND password = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2,password);
rs=pstmt.executeQuery();
if(rs.next()){
action = "table";
}
else{action = null;
message="wrong password";}
}
catch(Exception e){}
return action;
}
}
public String modify(){
return "modify";}}
我构建了3个页面,第一个用于登录:
登录
ID号码:
密码:
第二个用于显示表格的选项:
<h:head>
<title>table</title>
</h:head>
<h:body>
<h:form>
My Tasks:
ID =<h:outputText id="output" value="#{index.id}"/>
<h:commandButton value="Modify My Task" action="#{index.modify()}"/>
</h:form>
</h:body>
桌子
我的任务:
身份证=
第三,修改:
<h:head>
<title>Modify</title>
</h:head>
<h:body>
<h:form>
ID =<h:outputText id="output" value="#{index.id}"/>
</h:form>
</h:body>
修改
身份证=
我的问题是,表页面仍然可以显示我用来登录的id,但第三个页面只将id返回为null。
我做错了什么???在您的
index.java中,您可以使用以下方法:
public String login()
它处理来自登录页面的呼叫,并对其进行处理,最后显示表格页面
现在,当加载表页面时,它有一个命令按钮,必须由index.java
中的方法来处理
但是正如您所看到的,在该类中没有这样的方法来将id保存在所提到的对象中
您需要添加一个新方法:
public String modify()
正常过程。我想您刚刚错过了类login.java
之前的@SessionScoped
标记。
id
和password
的值在您第一次单击提交时更新,但当您导航到另一个页面(如modify
)时,这些值将丢失,因为这是另一个请求,默认情况下它们是@nonescope,请参阅
还有一个附加的右括号}
关闭类login.java
,在修改方法之前,请确保该方法在类中。
希望这是有用的,祝你好运。你能显示你的异常日志吗this@Ginger向右看,如果这是日志u谈论信息:访问未访问的参考信息:访问未访问的参考信息:访问未访问的参考信息:访问未访问的参考信息信息:访问未访问的参考信息信息:初始化Mojarra 2.2.0(20130502-2118)对于上下文“/SQL”信息:在[/SQL]信息处加载应用程序[SQL]:SQL在903毫秒内成功部署。感谢您的帮助。我确实错过了粘贴问题标签的机会:)我可以在您描述问题后看到问题。当我进入另一个页面时,你能教我需要做什么来保持值吗?@SessionScoped标记足以在会话期间为每个用户保留数据,无论他/她在应用程序中导航到哪个站点。会话ID由服务器根据浏览器生成,当您关闭浏览器并重新打开它并访问同一页面时,您将获得一个新的会话ID,除非它已注册为cookie,这样就可以了,祝您一切顺利。至少您可以说这是正确的答案!,顺便说一下,我对你的问题投了票。谢谢,我试着投你的票,但我的分数不够;)但是谢谢你,这确实帮了大忙
public String modify()