2013-07-03 85 views
0

我的login.xhtml頁面中有兩個文本框和一個提交按鈕。我也有一個豆。下面是代碼:將JSF文本框值作爲參數發送到託管bean函數

<?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功能的數據庫檢查,所以我需要通過這兩個文本框的值作爲參數。但我不知道該怎麼做。我只是嘗試了代碼,但它只是傳遞空字符串作爲參數。誰能幫我這個?

謝謝

回答

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

+0

謝謝你的答案 – yrazlik

+0

歡迎你@bigO – erencan

0

JSF自動將文本框值綁定到backing 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"; } 

希望這會有所幫助。

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 
    } 

    } 
} 
2

如何從文本框傳遞價值豆 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() { 
} 

}