初始值,在primefaces中设置布尔按钮

时间:2012-11-14 16:26:50

标签: jsf-2 primefaces

我正在使用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操作不兼容,这导致异常。

我希望能够做的是在加载表单时,当comment属性有一些现有文本时,将selectBooleanButton组件的初始状态设置为'on',当它为空时将其设置为'off'。我正在寻找一种方法来解决这个问题,这不需要我在模型中为我想要隐藏面板的每个实例创建一个属性,因为这将导致数十个和几十个属性,因为我的真实世界形式很多这些评论部分非常大。

1 个答案:

答案 0 :(得分:1)

我也在Primefaces论坛上发布了这个问题,但也没有收到任何答案,所以此时可能没有一个很好的解决方案,或者至少没有一个已经共享的问题。我最终要解决的问题是创建组件的两个版本,并使用rendered属性来控制使用哪个版本,如下所示:

<p:selectBooleanButton 
     onLabel="Comment" offLabel="Comment" 
     onIcon="ui-icon-check" offIcon="ui-icon-close"
     value="true" rendered="#{not empty myBean.comment}"
     onchange="toggleDisplay(this.checked,'myForm:commentPanel');" /> 

<p:selectBooleanButton 
     onLabel="Comment" offLabel="Comment" 
     onIcon="ui-icon-check" offIcon="ui-icon-close"
     value="false" rendered="#{empty myBean.comment}"
     onchange="toggleDisplay(this.checked,'myForm:commentPanel');" />