2012-11-14 17 views
1

我正在使用Primefaces和MyFaces。我想使用selectBooleanButton組件來控制其他組件在長和相當複雜的形式中的可見性。在primefaces中使用setBooleanButton的初始值

簡化示例代碼:

<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' 。我正在尋找一種方法來解決這個問題,這不需要我在模型中爲每個想要隱藏面板的實例創建一個屬性,因爲這會導致幾十個和幾十個屬性,因爲我的真實世界形式這些評論部分中有很多是非常大的。

+0

我猜這是一個真正的stumper。有人有主意嗎?我在這一個上很好。 – tcprogrammer

+0

還卡住了,有人嗎? – tcprogrammer

回答

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');" /> 
相關問題