Primefaces 通过 Javascript 更改元素属性

Primefaces change element attribute via Javascript

我正在开发使用 Primefaces 3.5 的项目(是的,这是一个很旧的版本)。我想实现的是 Javascript 中的一个函数,它将更改 Primefaces 元素的属性。可以吗?

我的面板定义为:

<p:panel id="mypanel" widgetVar="mypanelWidget" header="A title here" toggleable="true" toggleOrientation="vertical" collapsed="true">

我的想法是将 collapsed="true" 更改为 collapsed="false" 和 Javascript。

由于更新面板的 ajax 调用,这种需求激增,更新后,它显示为折叠状态。在回调中执行 mypanelWidget.expand() 不是一个好主意,因为我的页面变得非常生动。

两个选项:

  1. 只需在 collapsed 属性中使用 EL 来检查某些模型状态,而不是指定硬编码 true.

    <p:panel ... collapsed="#{not bean.ajaxMethodCalled}">
    

    如果调用了感兴趣的 ajax 方法,请确保 isAjaxMethodCalled() returns true。它不一定需要是布尔值 属性,它可以是任何东西,包括检查 HTTP 请求参数映射,只要它评估为所需的布尔值结果即可。

  2. 在 ajax 调用期间不要更新面板本身。相反,更新其内容。

    <p:panel ...>
        <h:panelGroup layout="block" id="panelContents">
            ...
            <p:ajax update="panelContents" />
            ...
        </h:panelGroup>
    </p:panel>
    

    这样 HTML DOM 树中面板的 HTML 表示状态保持不变。