これはこの美しいサイトの最初の質問です。私はたくさんのグーグルで検索しましたが、解決策は見つかりませんでした。JSFは@Named @RequestScoped Beanにサブミットされた入力値を設定しません
私はJSFを使い始めました。私はKent Ka Lok Tongの "JSF 2 APIs and JBoss Seam"でそれを学んでいます。
今、私は簡単なログイン実装に問題があります。私は自分のユーザー名とパスワードのプロパティがnullなるアプリケーションを実行すると
package app.controller;
import app.model.beans.User;
import javax.faces.bean.RequestScoped;
import javax.inject.Named;
@Named("loginRequest")
@RequestScoped
public class LoginRequest {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public LoginRequest(){
System.out.println("created " + this.toString());
}
public String doLogin(){
if(this.username != null && this.password != null){
if(this.username.equals("user") && this.password.equals("password")){
//this.userHolder.setCurrentUser(username);
return "success";
}
return "failure";
}
return "failure";
}
}
:
<?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://java.sun.com/jsf/html">
<h:head>
<title>Login</title>
</h:head>
<h:body>
<h1>Login</h1>
<h:messages for="loginForm" />
<h:form id="loginForm">
<h:inputText id="username" value="#{loginRequest.username}" required="true" />
<h:inputSecret id="password" value="#{loginRequest.password}" required="true" />
<h:commandButton value="Login" action="#{loginRequest.doLogin}"></h:commandButton>
</h:form>
</h:body>
</html>
とバッキングBean:私は、ログインページがあります。私は私のアプリケーションをデバッグし、私はsettersメソッドが正しく呼び出されていることを見た。問題は、setUsernameが呼び出され、LoginRequestのインスタンスが存在し、setPassword関数と呼ばれるときにインスタンスが異なることです。アプリケーションがこれを行うと思われます:
obj1 = new LoginRequest() //username and password = null;
obj1.username = username;
obj1 = new LoginRequest() //username and password = null;
obj1.password = password;
obj1 = new LoginRequest() //username and password = null;
obj1.doLogin();
私は困っていますか?間違いはどこですか?
ありがとうございます!あなたの豆から
敬具
マルコ
「アプリケーションを実行する」とはどういう意味ですか?ログインページを開いて、テキストボックスにあなたの名前とパスワードを入力し、ログインボタンをクリックしますか? – egbokul
はい、グラスフィッシュにアプリを配備し、ブラウザでログインページを開き、ユーザーとパスワードを入力してボタンを押します。 – EmarJ