Java 如何在JSF中保持登录值

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

这是我在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 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()