我试图从现有的Primefaces组件构建自定义组件,我需要一些帮助。我有一个selectOneMenu,我希望它根据在菜单中选择哪个选项来呈现或不呈现(以及禁用或启用)其他组件。这里的困难之处在于我无法使用托管Bean(我有几个原因),我需要一个纯粹的xhtml代码。有条件呈现取决于p:selectOneMenu值
我尝试了一些<c:choose>
和<ui:parameter>
东西来创建布尔值,但由于某种原因,我看不到它不工作。你们可以看看我的代码,看看你有什么想法吗?这可能是一件简单的事,我无法想象或者我还不知道的事情。
<h:body>
<h:form id="abc">
<ui:repeat var="pd" value="#{produtoMB.produtos}">
<h:panelGroup id="linha">
<c:choose>
<c:when test="#{pd.marca == X1}">
<c:set var="render" value="#{true}" />
</c:when>
<c:otherwise>
<c:set var="render" value="#{false}" />
</c:otherwise>
</c:choose>
<p:selectOneMenu value="#{pd.marca}">
<f:selectItem itemLabel="Select One" itemValue="" noSelectionOption="true"/>
<f:selectItem itemLabel="Xbox One" itemValue="X1" />
<f:selectItem itemLabel="PlayStation 4" itemValue="PS4" />
<f:selectItem itemLabel="Wii U" itemValue="WU" />
<p:ajax update="linha" />
</p:selectOneMenu>
<p:inputText value="#{pd.aparelho}" disabled="#{render}"/>
<h:outputText value="Microsoft" rendered="#{render}"/>
<p:commandButton value="X" />
</h:panelGroup>
<br />
</ui:repeat>
<br />
<p:commandButton actionListener="#{produtoMB.botaoMais}" value="+" update="abc"/>
<p:commandButton actionListener="#{produtoMB.botaoMenos}" value="-" update="abc"/>
</h:form>
Balus,非常感谢你的回答。这确实是一个更有意义的解决方案(出于某种原因,我甚至没有考虑过在每个“禁用”和“渲染”属性中写入条件的想法。在得到您的答案之前,我注意到了EL表达式中的错误,但也要感谢你!我真的很喜欢按照我的想法工作,但我们今生不可能拥有我们想要的,对吧?;-)非常感谢你,你救了我一天! –
不客气。 – BalusC
Baulus,你认为可能有办法创建布尔变量并按照我第一次使用它们的方式使用它们,也许使用不同于JSTL标签的东西?只是一个好奇心:我现在解决了我的问题,但我想到了不同的场景,我需要回到我原来的想法...... –