【问题标题】:Pass variable into Primefaces selector将变量传递给 Primefaces 选择器
【发布时间】:2013-03-22 13:16:17
【问题描述】:

在我的 JSF/Primefaces 页面中,我有一个包含 tabview 的表单,其中每个选项卡包含一个手风琴面板,每个手风琴包含一个数据表。单个数据表的完整id类似于id="form:tabs:0:accordion:0:table"

每个选项卡还包含一个命令按钮,该按钮必须更新选项卡本身内的数据表,因此它不会更新其他选项卡内的表。

使用 Primefaces 选择器,我设法更新了所有 id 以“table”结尾的数据表:update="searchValue @('div$=table'),但我无法解决所有 id 以“0:table”结尾的数据表,其中“ 0" 是动态的(基于当前选项卡)。

我试过了:

<ui:param name="ta" value="#{settore.id - 1}:table" />
<p:commandButton id="plainSearch" value="Filter"
    action="#{myBean.search()}"
    update="@('div$=#{ta}')">

但它给了我一个 Javascript 错误:Uncaught Syntax Error: Unexpected identifier,然后整个表单被更新。

如何正确地将变量传递给 Primefaces 选择器?

这是我的 XHTML 页面:

<h:form id="form">
  <p:tabView id="tabs" value="#{myBean.sectors}" var="tab">
    <p:tab id="tab" title="#{tab.description}">
    <p:commandButton id="plainSearch" value="Filter"
      action="#{myBean.search()}"
      update="@('div$=table')">
      <p:accordionPanel id="accordion" value="#{myBean.getTabs()}" var="tab" multiple="true" activeIndex="#{myBean.activeIndexes}">
        <p:tab id="accordionTab" title="#{tab.title}">
          <p:dataTable id="table" var="row" value="#{myBean.getObjects()}"  emptyMessage="Empty table">
            <p:column headerText="Code">
              <h:outputText value="#{row.codice}" />
            </p:column>
            <p:column headerText="Description">
              <h:outputText value="#{row.descrizione}" />
            </p:column>
          </p:dataTable>
        </p:tab>
      </p:accordionPanel>
    </p:tab>
  </p:tabView>
</h:form>

【问题讨论】:

  • 我目前正在使用一种解决方法:每个表都有一个定义为styleClass="#{tab.id - 1}_tableStyle" 的样式类,并且命令按钮使用update="@(.#{settore.id - 1}_tableStyle)" 引用它们。
  • 您是在寻找正确的 primefaces/jquery 选择器,还是在寻找一种使用 EL 输入选项卡编号的方法?如果您像update="@('div$=0\:table')" 一样手动设置“0”会发生什么?那它有用吗?
  • @Jens,我正在寻找一种输入标签编号的方法。但我注意到(使用 Firebug)我总是收到以下错误:SyntaxError: missing } after property list ... updateSelector:'@('div$=table')'});return false,即使使用 update="@('div$=0\:table')"update="@('div$=table')"

标签: jquery jsf jquery-selectors primefaces


【解决方案1】:

我对 (jquery) 选择器本身有点困惑。如果我理解正确,primefaces 此时正在使用 jquery 选择器,@() 的语法只会将其识别为 jquery 选择器。

如果是jquery选择器(Attribute Ends With Selector)不应该是这样的吗:

$(div[id$=table])

对于带有 id 的版本:

$(div[id$=#{ta}\\:table])

编辑:我已经更新了代码示例(不带引号)

【讨论】:

  • 使用update="@('div[id$=\"table\"]')"我得到错误Invalid location of text (\"]')") in tag (&lt;p:commandButton&gt;).
  • 很抱歉,我没有运行示例来测试它。我想您需要找到一种方法让所有必要的字符出现在最终的 html 中(即转义特殊字符)。抱歉,我目前没有机会对此进行测试。
  • 我猜你不能使用单引号。 update="@(div[id$=table])" 不会产生错误。看来你甚至可以省略桌子上的双引号。
  • 没有单引号我得到错误Syntax error, unrecognized expression: div$=table
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多