Jsf “怎么说?”;“崩溃”;p的属性:野外作业?

Jsf “怎么说?”;“崩溃”;p的属性:野外作业?,jsf,primefaces,jsf-2,jsf-2.2,fieldset,Jsf,Primefaces,Jsf 2,Jsf 2.2,Fieldset,我正在使用PrimeFaces的组件,我想从我的bean控制它是否崩溃。我希望collpased属性能够完成这项工作,但这不起作用 另一方面,“绑定”似乎正确反映了组件的状态: 我的豆子 @Named @RequestScoped public class TestBean { //with get/set private boolean collapsed; //with get/set private Fieldset fieldset; } 我的页

我正在使用PrimeFaces的组件,我想从我的bean控制它是否崩溃。我希望
collpased
属性能够完成这项工作,但这不起作用

另一方面,“绑定”似乎正确反映了组件的状态:

我的豆子

@Named
@RequestScoped
public class TestBean {

    //with get/set
    private boolean collapsed;

    //with get/set
    private Fieldset fieldset;

 }
我的页面:

<h:form>
    <p:fieldset 
         id="togglebleFieldset"
         legend="Toggleable Fieldset"
         toggleable="true"
         binding="#{testBean.fieldset}"
         collapsed="#{testBean.collapsed}">

         fieldset content
         <p:ajax event="toggle" update="@form"/>      
    </p:fieldset>

    <h:outputText value="Value is never updated: #{testBean.collapsed}" />
    <br/><h:outputText value="Binding correctly reflects the state: #{testBean.fieldset.collapsed}" />
</h:form>

字段集内容

出于超出此问题范围的原因,使用绑定解决方案对我来说会稍微复杂一点

为什么不使用组件的折叠值更新
#{testBean.collapsed}


(使用PrimeFaces的6.0和6.2版)

我的猜测是
collapsed
属性只定义初始状态,无法跟踪当前状态。与其使用绑定,不如尝试使用
toggle
事件跟踪状态。@ayrton但如果我想通过编程更改状态,而不仅仅是跟踪状态,该怎么办?为什么不在ajax标记上添加一个侦听器,并使用该事件切换值?@Kukeltje是的,我可以自己同步bean的状态,但是通常jsf会在幕后处理这些问题。不,不总是这样(在复杂组件中,核心jsf除了“普通”数据表之外几乎没有其他组件,大多数情况下从不)。哦并检查bean范围。它太短了!您很可能每次都重置它(布尔值不能为空);重复:?我猜
折叠的
属性只定义初始状态,无法跟踪当前状态。与其使用绑定,不如尝试使用
toggle
事件跟踪状态。@ayrton但如果我想通过编程更改状态,而不仅仅是跟踪状态,该怎么办?为什么不在ajax标记上添加一个侦听器,并使用该事件切换值?@Kukeltje是的,我可以自己同步bean的状态,但是通常jsf会在幕后处理这些问题。不,不总是这样(在复杂组件中,核心jsf除了“普通”数据表之外几乎没有其他组件,大多数情况下从不)。哦并检查bean范围。它太短了!您很可能每次都重置它(布尔值不能为空);重复:?