Jsf 条件渲染f:selectItem可能存在的问题

Jsf 条件渲染f:selectItem可能存在的问题,jsf,jsf-2,selectonemenu,rendered-attribute,Jsf,Jsf 2,Selectonemenu,Rendered Attribute,我有一个包含多个h:selectOneMenu或p:selectOneMenu的页面,我想使用同一页面编辑和添加数据。 编辑所需数据时f:selectItem。我知道这个组件没有渲染属性。我读到我可以使用 嗯。例如,如果我写 简单的解决方案(但性能较差)是在托管bean中使用boolean editMode属性来启用/禁用组件。基本示例: 在你的豆子里 @ManagedBean @ViewScoped public class Bean { private int id;

我有一个包含多个
h:selectOneMenu
p:selectOneMenu
的页面,我想使用同一页面编辑和添加数据。 编辑所需数据时
f:selectItem
。我知道这个组件没有渲染属性。我读到我可以使用

嗯。例如,如果我写


简单的解决方案(但性能较差)是在托管bean中使用
boolean editMode
属性来启用/禁用组件。基本示例:


在你的豆子里

@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="#{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" />


@GaborSch如果你不知道JSF是如何工作的,请不要添加对OP解决问题没有帮助的评论。@LuiggiMendoza我知道JSF是如何工作的,但我希望OP在提出问题之前先尝试一下。顺便说一句,答案是
,所以这不是一个好问题。@GaborSch如果你知道JSF是如何工作的,那么你已经知道OP的建议不是最好的解决方案=\,如果你真的知道,请提供一个答案:)。@LuiggiMendoza让我们不要在这个问题上争论。OP想知道一个解决方案(一段代码)是否有效。决定这个问题,,有人必须试一试。也许我无法正确理解这个问题,但我们不能有条件地更改与
f:selectItems
连接的支持集合吗?@gangnamstyleoverflower这可能是另一种解决方案,但我倾向于在
@ApplicationScoped
托管bean和不时更新值,而不是在每个请求上获取列表值。