将JSF文本框值作为参数发送到托管bean函数

时间:2013-07-03 13:16:05

标签: jsf managed-bean

我的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 个答案:

答案 0 :(得分:2)

实际上,您无需将用户名和密码参数传递给案例中的操作方法。

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

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

您的行动将是

<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. 

}

进一步阅读

Communication in JSF 2.0 tutorial by BalusC

Basic Login Mechanism using Filters

JSF Request Life Cycle

答案 1 :(得分: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(名称= “用户”) RequestScoped 公共类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() {
}

}

答案 2 :(得分: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"; }

希望这有帮助。

答案 3 :(得分:0)

嗯,根据我的理解,您是否在登录检查功能中检查了这些文本框的值。 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
     }

   }
}