1

我正在开发一个使用基于 SOAP 的 Web 服务的 JSF 2.0 应用程序。

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

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

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

我希望能够为 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.xml 中为每个类添加 message-bean 元素)。

即使注释所有类是一个可行的选项,该解决方案也会有一个缺点:服务合同 (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

只需制作 的Usera 属性即可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 回答