【问题标题】:Sending JSF textbox value to a managed bean function as a parameter [duplicate]将 JSF 文本框值作为参数发送到托管 bean 函数[重复]
【发布时间】:2013-07-01 04:57:30
【问题描述】:

我的 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>

还有 bean 文件:

/*
* 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 函数中进行数据库检查,因此我需要将这两个文本框的值作为参数传递。但我不知道该怎么做。我刚刚尝试了代码,但它只是将空字符串作为参数传递。谁能帮我解决这个问题?

谢谢

【问题讨论】:

    标签: jsf managed-bean


    【解决方案1】:

    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"; }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      一个 JSF 页面有一个 request life cycle。如果您查看 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. 
      
      }
      

      供进一步阅读

      Communication in JSF 2.0 tutorial by BalusC

      Basic Login Mechanism using Filters

      JSF Request Life Cycle

      【讨论】:

      • 感谢您的回答
      • 不客气@bigO
      【解决方案3】:

      好吧,据我了解,您是否会在 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
           }
      
         }
      }
      

      【讨论】:

        【解决方案4】:

        如何将值从文本框传递给 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") 请求范围 公共类用户编号 {

        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() {
        }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-25
          • 2017-11-04
          • 1970-01-01
          • 1970-01-01
          • 2016-07-09
          • 2017-06-14
          • 1970-01-01
          相关资源
          最近更新 更多