登录页面错误



这是我的登录页面

<h:outputText value="ENTER USERNAME" ></h:outputText>
<p:inputText value="#{treeBean.username}" id="user"></p:inputText>
<h:outputText value="ENTER PASSWORD" ></h:outputText>
<p:inputText value="#{treeBean.userpass}" id="pass"></p:inputText>
<p:commandButton value="GO"  action="#{treeBean.checkuser}" onclick="redirect()"></p:commandButton>
<script type="text/javascript">
function redirect()
{
window.location="/arcpage/arc.jsf";   
}
</script>

这是我的树豆。checkuser函数

public void checkuser()
{
Connection con=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/", "root", "root");
try
{
st.executeUpdate("USE ARCPAGE");
String update="SELECT * FROM USER WHERE USER_NAME=? AND USER_PASS=?";
    PreparedStatement prest=con.prepareStatement(update);
    prest.setString(1,username);
    prest.setString(2,userpass);
ResultSet rs=prest.executeQuery();
if(rs.next()==false)
{
check="false";
}
else
{
check="true";
}
    }}}

这是我的主页:

<script type="text/javascript">
if(check!="true")
{
 window.location="/arcpage/login.jsf";   
}
</script>
<Main Page Content>

如果我输入正确的用户名-通行证组合,我将被重定向到登录页面而不是主页面。如果我再次输入正确的组合,我将被重定向到主页面。即使我输入了一个错误的组合,第二次我被重定向到主页。我认为首先执行的是主页,然后执行的是checkuser(),所以在显示主页之前不会更新check的值。为什么会发生这种情况?

这是因为您在onclick中添加了一些JavaScript函数来进行重定向。当用户单击按钮时调用该函数。这反过来导致JSF操作被完全跳过。您似乎还认为JSF和JavaScript在某种程度上是同步运行的。这是不真实的。这是两种完全不同的语言。JSF只在web服务器上运行,生成HTML/CSS/JS代码并将其发送给web浏览器。JS在浏览器中运行,只拦截HTML的DOM树。

要解决这个问题,只需删除 onclick并在JSF操作方法中进行导航。所以:

<p:commandButton value="GO"  action="#{treeBean.checkuser}" />

public String checkuser() {
    User user = userService.find(username, password);
    if (user == null) {
        return "login";
    } else {
        return "arc";
    }
}

相关内容

  • 没有找到相关文章