私はJava EEを初めて使用し、netbeans 7.1.2を使用して最初のJava EEログインアプリケーションを開発しています。「Users」という名前のデータベーステーブルとエンティティがあり、いくつかのnadedクエリ、永続化ユニットを含むセッションBean「UsersFacade」、および以下の「authenticaate」という名前のメソッドがコードです
public Users authenticate(String login_id, String pwd) {
Users user = (Users) em.createNamedQuery("Users.authenticate")
.setParameter("login_name", login_id)
.setParameter("password", pwd)
.getResultList().get(0);
最後に、2 つのローカル メンバー login_name と password を含むセッション スコープの jsf マネージド Bean があり、jsf ページ login.xhtml はこれらのフィールドにバインドされています。この Bean には認証メソッドもあり、セッション Bean 'UserFacade' 認証メッセージを呼び出します。
@ManagedBean
@SessionScoped
public class Login implements Serializable {
private String login_name;
private String password;
private Users user;
private @EJB UsersFacade user_services;
public String authenticate() {
user = user_services.authenticate(this.getLogin_name(),this.getPassword());
if (user != null){
return "home";
} else {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage("login", new FacesMessage("Invalid UserName and Password"));
return "login";
}
この時点まで、すべてが正常に機能します。ただし、ホームページでは、値を変更してレコードを保存できるように、users テーブルのすべてのデータ メンバーを表示したいと考えています。ホームページで次のようにコーディングしました:
<h:outputText value="Welcome #{login.user.login_name}" />
マネージド Bean でユーザー (エンティティ) を宣言しており、エンティティのプロパティにアクセスできるはずですが、アプリケーションを実行すると、次のエラーが発生します。
クラス「controller.Login」にはプロパティ「user」がありません
1 つのマネージド Bean に 3 つの異なる実装がある場合 (3 つの異なるロール/タイプのユーザーに 3 つの異なるユーザー インターフェイス)、私が間違っていることと、jsf ページをマネージド Bean にバインドする理想的な方法を提案できますか? JPA (エンティティ、セッション) と JSF マネージド Bean を使用しています。どうもありがとう。