我正在使用 Primefaces 和 MyFaces。我想使用 selectBooleanButton 组件来控制长且相当复杂的表单中其他组件的可见性。
简化示例代码:
<p:selectBooleanButton
onLabel="Comment" offLabel="Comment"
onIcon="ui-icon-check" offIcon="ui-icon-close"
value="#{not empty myBean.comment}"
onchange="toggleDisplay(this.checked,'myForm:commentPanel');" />
<h:panelGroup id="commentPanel"
style="display:#{empty myBean.comment ? 'none' : 'block'}">
<p:inputTextarea value="{myBean.comment}"/>
</h:panelGroup>
onchange 属性中的 javascript 只是将显示样式从无切换为阻止,反之亦然以隐藏或取消隐藏面板组。我希望/需要组件保留在视图中,我不想使用渲染属性来完全删除它们。
我遇到麻烦的地方是因为 setBooleanButton 组件的 value 属性中使用了 EL 构造。我确实意识到这个 EL 语句与 set 操作不兼容,这会导致异常。
我想要做的是在加载表单时,当评论属性有一些现有文本时,将 selectBooleanButton 组件的初始状态设置为“on”,当它为空时设置为“off”。我正在寻找一种解决此问题的方法,它不需要我在模型中为我想要隐藏面板的每个实例创建一个属性,因为这会导致数十个属性,因为我的真实世界形式非常大,其中有许多评论部分。