【问题标题】:inital value with setBooleanButton in primefaces在primefaces中设置布尔按钮的初始值
【发布时间】:2012-11-14 16:26:49
【问题描述】:

我正在使用 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 组件的初始状态设置为“打开”,当评论属性有一些现有文本时,设置为“关闭”,当它为空时。我正在寻找一种解决此问题的方法,它不需要我在模型中为我想要隐藏面板的每个实例创建一个属性,因为这会导致数十个属性,因为我的真实世界形式非常大,有很多这样的评论部分。

【问题讨论】:

  • 我猜这个是一个真正的笨蛋。有人有想法么?我在这个方面做得很好。

标签: jsf-2 primefaces


【解决方案1】:

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

<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');" /> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2015-01-02
    • 2023-01-27
    相关资源
    最近更新 更多