0

アドレスBeanを作成しましたが、これを2回使用したいと思います。1回は住所用、もう1回は住所用です。以下のようにfacesconfigを使用してこれを実現できますが、アノテーションを介してこれを実行できるかどうか疑問に思っています。

たとえば、@ ManagedBean(name = "StreetAddress")と@ManagedBean(name = "MailingAddress")を同じクラスに配置しますか?ここで明らかな何かが欠けているように感じますが、何がわからないのです。

<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 */
}
4

1 に答える 1

1

設計ミスがあります。それらは、バッキングBeanクラスというよりもモデルクラスのように見えます。モデルクラスは、マネージドBeanであってはなりません。それらをバッキングBeanクラスのプロパティにして、代わりに管理します。

例えば

@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() {
        // ...
    }

    // ...
}

(ちなみに名前を変更AddressBeanAddressます)

次のように使用します

<h:inputText value="#{addressBacking.mailingAddress.line_one}" />
...
<h:inputText value="#{addressBacking.streetAddress.line_one}" />
...
于 2012-06-02T16:37:44.970 に答える