首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将单个类注释为两个不同的托管bean?

如何将单个类注释为两个不同的托管bean?
EN

Stack Overflow用户
提问于 2012-06-02 22:24:28
回答 1查看 71关注 0票数 0

我已经创建了一个地址bean,我想使用它两次-一次用于街道地址,一次用于邮寄地址。根据下面的说明,我可以使用faces config来实现这一点,但我想知道是否可以通过注释来实现这一点。

例如,将@ManagedBean(name="StreetAddress")和@ManagedBean(name="MailingAddress")放在同一个类中?我觉得我遗漏了一些明显的东西,但我不确定是什么。

代码语言:javascript
复制
<managed-bean>
    <managed-bean-name>MailingAddress</managed-bean-name>
    <managed-bean-class>com.leetb.jsf_ex1.model.AddressBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <map-entries/>
</managed-bean>
<managed-bean>
    <managed-bean-name>StreetAddress</managed-bean-name>
    <managed-bean-class>com.leetb.jsf_ex1.model.AddressBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <map-entries/>
</managed-bean>

public class AddressBean {

    private String line_one;
    private String line_two;
    private String suburb;
    private String state;
    private String postcode;

/* getters and setters snipped */
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-03 00:37:45

你有一个设计上的错误。这些看起来更像模型类,而不是支持bean类。模型类根本不应该是托管bean。使它们成为支持bean类的属性,并对其进行管理。

例如。

代码语言:javascript
复制
@ManagedBean
@ViewScoped
public class AddressBacking {

    private AddressBean mailingAddress;
    private AddressBean streetAddress;

    @PostConstruct
    public void init() {
        // Prepare them here yourself. For example, when it's for a new entry.
        mailingAddress = new AddressBean();
        streetAddress = new AddressBean();
    }

    public void save() {
        // ...
    }

    // ...
}

(顺便说一下,我将AddressBean重命名为Address )

并按如下方式使用它

代码语言:javascript
复制
<h:inputText value="#{addressBacking.mailingAddress.line_one}" />
...
<h:inputText value="#{addressBacking.streetAddress.line_one}" />
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10863060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档