2012-05-20 35 views
1

我正在开发一个使用基于SOAP的Web服务的JSF 2.0应用程序。如何一次声明多个JSF托管的bean

我想在JSFs页面中使用Web服务生成的大部分客户类 - 但客户类不是托管bean(也不是CDI bean)......并且因为有很多客户类“T认为是@ManagedBean@Named添加注释的所有类可行...

让我给你举个例子这样的事情可能会更清楚一点:

用户类是生成的客户端类 - 这个类只有两个属性(登录名和密码)。

我希望能够将值分配给特定的用户在JSF页面的属性:

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

然后,我想打电话给我UserService对用户进行认证:

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

从JSF页面为User对象分配值的唯一方法(AFAIK)是通过使User对象成为托管bean(或CDI bean)。由于有100多个客户端类,我绝对不想在所有类上添加@ManagedBean@Named注解(我同样不希望为faces-config中的每个类添加消息bean元素。 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> 

回答

2

只是使UserUserService的属性。这也更符合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}" /> 
+0

嗨 - 感谢您的回答。是的,这很简单,似乎是要走的路(羞辱我,我以前没有想到过!=)非常感谢... – cldjr

+0

是'ViewScoped'这个'javax.faces.bean.ViewScoped'吗? –