我的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函数中进行数据库检查,因此我需要将这两个文本框的值作为参数传递。但我不知道该怎么做。我只是尝试了代码,但它只是将空字符串作为参数传递。任何人都可以帮我这个吗?
谢谢
答案 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
答案 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
}
}
}