2

JSFの初心者からの簡単な質問:

私は非常に単純なJSFフォームを持っています:

<h:form>
<p>#{messages.loginTextfieldUsername}</p>
<h:inputText value="#{userServiceImpl.user.name}" />

<p>#{messages.loginTextfieldPassword}</p>
<h:inputSecret value="#{userServiceImpl.user.password}" />

<h:commandButton value="#{messages.loginButtonLogin}" action="#{userServiceImpl.authenticateUser}" />
</h:form>

userServiceImplクラスは次のとおりです。

@Named
@RequestScoped
public class UserServiceImpl implements UserService {

private UserSession userSession;
private User user;

@Inject
public UserServiceImpl(UserSession userSession) {
    this.userSession = userSession;
}

@PostConstruct
public void prepareService() {
    user = new User();
}

@Override
public View authenticateUser() {
    userSession.setLoggedUser(user);
    return View.MAIN;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

}

私の目標は非常に単純です。ユーザーがログインボタンを押したときに、ユーザーを認証したいと思います。

問題は次のとおりです。認証メソッドが呼び出されると、ユーザー属性がnullになります。アプリケーションをデバッグし、getUserメソッドが呼び出され、値が適切に設定されましたが、authenticateUserが呼び出される前のある時点([まだ]は見つかりませんでした)で、User属性がnullに設定されています...

これはかなり基本的な質問だと思いますが...私の間違いがどこにあるかを指摘できますか?

ありがとう。

4

1 に答える 1

0

以前の質問に基づいて、何らかの理由で<managed-bean-scope>ofnoneを試したようです。faces-config.xmlを使用すると、問題の症状が正確に一致し@ManagedBean @NoneScopedます。この問題を完全に説明faces-config.xmlするスコープでもこの Bean を構成したようです。noneスコープを使用すると、EL で評価されるnoneたびに新しい Bean インスタンスが作成されます。#{userServiceImpl}したがって、フォーム送信により、3 つの Bean が効果的に作成されます。1 つはユーザー名が設定され、もう 1 つはユーザー パスワードが設定され、もう 1 つはアクションが呼び出されます。

からマネージド Bean 設定を削除する必要がありますfaces-config.xml@Inject(または)を使用する場合は使用しないでください@ManagedBean。Bean を構成するfaces-config.xml方法は、アノテーションが利用できなかった古い JSF 1.x 時代からの名残です。JSF 2.x の時点では、Bean 管理アノテーションのみをオーバーライドします。

于 2012-05-23T16:09:20.620 に答える