1

SOAP ベースの Web サービスを使用する JSF 2.0 アプリを開発しています。

Web サービス用に生成されたほとんどのクライアント クラスを JSF ページで使用したいのですが、クライアント クラスはマネージド Bean (または CDI Bean) ではありません。すべてのクラスに追加@ManagedBeanまたは注釈が可能です...@Named

少しわかりやすくなるように、例を挙げましょう。

User クラスは生成されたクライアント クラスです。このクラスには 2 つの属性 (ログインとパスワード) しかありません。

JSF ページで特定のユーザーの属性に値を割り当てられるようにしたいと考えています。

<h:inputText value="#{user.name}"/>
<h:inputText value="#{user.password}"/>

そしてUserService、ユーザーを認証するためにmy を呼び出します。

<h:commandButton value="Login" action="#{userService.authenticate}"/>

JSF ページから User オブジェクトに値を割り当てる唯一の方法 (AFAIK) は、User オブジェクトをマネージド Bean (または CDI Bean) にすることです。

100 を超えるクライアント クラスがあるため、すべてのクラスに注釈を追加したくないことは間違いありません@ManagedBean(@Named同様に、faces-config.xml の各クラスにメッセージ ビーン要素を追加したくありません)。

また、すべてのクラスに注釈を付けることが実現可能なオプションであったとしても、ソリューションには欠点があります。サービス コントラクト (WSDL) はいつでも変更される可能性があり、クライアント クラスを再生成する必要があります... 注釈付きのクラスを失います。

この(種類の)問題を処理する最善の方法は何ですか?

faces-config.xml (以下の例) でパッケージのすべてのクラスを宣言する方法を探しましたが、それを行う方法も実現可能な代替手段も見つかりませんでした。

<managed-beans>
    <managed-beans-package>x.y.z.ws.client</managed-beans-package>
    <managed-beans-scope>none</managed-beans-scope>
</managed-beans>
4

1 に答える 1

2

Userのプロパティを作成するだけですUserService。これは、JSF の MVC イデオロギーにもより適合しています。UserServiceがコントローラーでがUserモデルです。

したがって、

@ManagedBean
@ViewScoped
public class UserService {

    private User user;

    // ... (don't forget to prepare user in (post)constructor if "new" user)
}

<h:inputText value="#{userService.user.name}" />
<h:inputText value="#{userService.user.password}" />
于 2012-05-20T23:28:26.810 に答える