如何使用p:inputText将转换器传递到复合组件中?

时间:2019-08-06 16:17:04

标签: jsf composite-component converters

我想将p:datatable的过滤器放入复合组件中。过滤器使用p:inputText标签和p:ajax标签来定义键入延迟。问题在于,复合组件内部的转换器不执行任何操作。当我使用javax.faces.Long时,过滤器始终为String

我想在facelet中使用的工作代码:

     <p:column headerText="colum title"
        filterBy="#{p.p.idx}" sortBy="#{p.p.idx}">
        <f:facet name="filter">
          <p:inputText id="indexFilterInput"
            converter="javax.faces.Long" class="ui-column-filter">
            <p:ajax event="keyup" delay="800"
              oncomplete="PF('portDT').filter()" />
          </p:inputText>
        </f:facet>
        <h:outputText value="#{portRow.portIdx}" />
      </p:column>

我将f:facet放入了复合组件中:

<ui:component xmlns="http://www.w3.org/1999/xhtml"
  xmlns:p="http://primefaces.org/ui"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:cc="http://xmlns.jcp.org/jsf/composite">
  <cc:interface>
    <cc:attribute name="widgetVar" />
    <cc:attribute name="delay" />
    <cc:attribute name="converter" />
    <cc:insertFacet name="filter" />
  </cc:interface>
  <cc:implementation>
    <f:facet name="filter">
      <p:inputText id="filterInput" converter="#{cc.attrs.converter}"
        class="ui-column-filter" type="search">
        <p:ajax event="keyup" delay="#{cc.attrs.delay}"
          oncomplete="PF('#{cc.attrs.widgetVar}').filter()" />
      </p:inputText>
    </f:facet>
  </cc:implementation>
</ui:component>

这是组件gf:filterField的调用:

      <p:column style="width:4em"
        headerText="#{lbl['general.column.id']}" exportable="true"
        filterBy="#{p.p.id}" sortBy="#{p.p.id}">
        <gf:filterField id="index" widgetVar="portDT" delay="800" converter="javax.faces.Long"/>
        <h:outputText value="#{portRow.portId}" />
      </p:column>

在复合组件内的p:inputText中更换转换器时,该转换器也将被忽略。我需要将转换器作为参数传递,因为有些列是String列,有些是Long

cc:interface中是否还有其他cc:attribute标签?

0 个答案:

没有答案
相关问题