这是我的登录页面
<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";
}
}