3

複数のページがあるかh:selectOneMenup:selectOneMenu同じページを使用してデータを編集および追加したいと考えています。データを編集するときは必要f:selectItemです。このコンポーネントには属性がレンダリングされていないことを知っています。そして、私は使用できることを読みました<c:if>

Ok。たとえば、私が書く場合

<p:selectOneMenu rendered="#{not empty bean.id}"
    value="#{bean.selectedId}">
    <c:if test="${editableBean != null}">
        <f:selectItem itemLable="#{editableBean.name} itemValue=#{editableBean.id} />
    </c:if>
    <f:selectItems value="#{bean.listItems}" var="item"
        itemLabel="#{item.name}" itemValue="#{item.id}"/>
</p:selectOneMenu>

Primefacesやajaxリスナーで問題なく動作しますか?

4

1 に答える 1

4

簡単な解決策(ただし、パフォーマンスは低下します)はboolean editMode、管理対象Beanに属性を設定して、コンポーネントを有効/無効にすることです。基本的な例:

<p:selectOneMenu rendered="#{not empty bean.id}" disabled="#{bean.editMode}"
    value="#{bean.selectedId}">
    <f:selectItems value="#{bean.listItems}" var="item"
        itemLabel="#{item.name}" itemValue="#{item.id}"/>
</p:selectOneMenu>

あなたの豆で

@ManagedBean
@ViewScoped
public class Bean {

    private int id;
    private boolean editMode;
    //other attributes...
    //getters and setters...

    @PostConstruct
    public void init() {
        //a way to know if the bean it's in edit mode
        editMode = (id != 0);
    }
}

すべてのデータをロードしてから実際の値を選択する必要があるため、このソリューションのパフォーマンスは低下<p:selectOneMenu>しますが、必要な処理は実行されます。別のオプションは、この属性をのrenderedプロパティ<p:selectOneMenu><h:inputText disabled="true" readonly="true" />(または多分<h:outputText />)に使用することです。別の基本的なサンプル:

<p:selectOneMenu rendered="#{not empty bean.id && not bean.editMode}"
    value="#{bean.selectedId}">
    <f:selectItems value="#{bean.listItems}" var="item"
        itemLabel="#{item.name}" itemValue="#{item.id}"/>
</p:selectOneMenu>

<h:inputText rendered="#{bean.editMode}" value="{bean.selectedText}"
    disabled="true" readonly="true" />
于 2013-01-25T15:53:59.593 に答える