0

我的 login.xhtml 页面中有两个文本框和一个提交按钮。我也有一颗豆子。以下是代码:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
    <title>Welcome to Online Banking</title>
</h:head>
<h:body>
    <h:outputText value="Online Banking System Login" ></h:outputText>
    <h:form>
        <h:panelGrid columns="2" border="1">
            <h:outputText value="Username:"></h:outputText>
            <h:inputText id="username" value="#{loginBean.username}"></h:inputText>
            <h:outputText value="Password"></h:outputText>
            <h:inputSecret  id="password" value="#{loginBean.password}" >    </h:inputSecret>
            <h:commandButton value="Login" action="#{loginBean.loginCheck(username, password)}"></h:commandButton>

        </h:panelGrid>
    </h:form>
</h:body>
</html>

豆类文件:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans;

import javax.inject.Named;
import javax.enterprise.context.Dependent;

/**
 *
 * @author SUUSER
 */
@Named(value = "loginBean")
@Dependent

public class LoginBean {

/**
 * Creates a new instance of LoginBean
 */
public LoginBean() {
}

private static String username="", password="";

public String getUsername(){
    return username;
}
public String getPassword(){
    return password;
}
public void setUsername(String Username){
    username=Username;
}
public void setPassword(String Password){
    password=Password;
}

public void loginCheck(String username, String password){


}
}

我将在我的 loginCheck 函数中进行数据库检查,因此我需要将这两个文本框的值作为参数传递。但我不知道该怎么做。我刚刚尝试了代码,但它只是将空字符串作为参数传递。谁能帮我这个?

谢谢

4

4 回答 4

2

实际上,在您的情况下,您不需要将用户名和密码参数传递给操作方法。

JSF 页面有一个请求生命周期。如果您查看 JSF 请求生命周期,您会注意到在操作之前将值应用于托管 bean。

因此,在操作之前将 loginBean.username 和 loginBean.password 值设置为托管 bean 用户名和密码字段。您可以在 action 方法中访问它们。

你的行动将是

<h:commandButton value="Login" action="#{loginBean.loginCheck}"></h:commandButton>

和动作方法

public String loginCheck(){

  // search username and password in database.
  // username, password field are set to values on page and accessible in the action method. 
// Do not forget to navigate a proper page after according to login attempt. 

}

进一步阅读

BalusC 的 JSF 2.0 教程中的通信

使用过滤器的基本登录机制

JSF 请求生命周期

于 2013-07-03T13:52:30.130 回答
2

如何将值从文本框传递到 Bean 1-创建一个 .xhtml 文件

    <h:form id="frm">            
        <h:inputText id="t1" value="#{user.x}" />
        <h:commandButton  action="#{user.check}"  value="ok"/>
        <h:outputText  value="Value is #{user.msg}" ></h:outputText>
    </h:form>

2-创建一个bean

ManagedBean(name="user") RequestScoped public class UserNumber {

int x;
String msg;

public int getX() {
    return x;
}

public void setX(int x) {
    this.x = x;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}
public void check()
{
    if(x%2==0)
    {
        msg= "Even";
    }
    else
    {
        msg= "Odd";
    }
}


public UserNumber() {
}

}

于 2016-01-29T04:41:25.077 回答
0

JSF 自动将文本框值绑定到支持 bean 中的变量。

因此,您不需要在调用函数中将值传递给支持 bean。你可以这样放

<h:commandButton value="Login" action="#{loginBean.loginCheck}"></h:commandButton>

在 bean 中,您可以将它们用作常规变量。我还建议不要使用静态变量来存储支持 bean 数据。

    public String loginCheck(){if(username == <fromDB> && password == <fromDB>) return "loginsuccess"; else return "loginfailure"; }

希望这可以帮助。

于 2013-07-03T13:45:46.053 回答
0

好吧,据我了解,您是否在 loginCheck 函数中检查了这些文本框的值。JSF 自动将参数值设置为变量,因此您可以通过gets() 使用它们。例如如下:

<h:form>
    <h:panelGrid columns="2" border="1">
        <h:outputText value="Username:"></h:outputText>
        <h:inputText id="username" value="#{loginBean.username}"></h:inputText>
        <h:outputText value="Password"></h:outputText>
        <h:inputSecret  id="password" value="#{loginBean.password}" >    </h:inputSecret>
        <h:commandButton value="Login" action="#{loginBean.loginCheck()}"></h:commandButton>

    </h:panelGrid>
</h:form>

在他的 ManagedBean 中结束的是以下内容:

@ManagedBean(name= "loginBean")
public class LoginBean {

public LoginBean() {
}

// gets and sets

public void loginCheck(){

   if(getUsername() != null && getPassword() != null){

       // and here you chek database parameters
     }

   }
}
于 2013-07-03T14:03:35.513 回答