【问题标题】:Primefaces datatable filterPrimefaces 数据表过滤器
【发布时间】:2013-03-22 14:32:06
【问题描述】:

我尝试了一些方法,但无法对过滤器数据表执行任何操作。已经按照 primefaces 展示的例子,什么都没有。

我有以下代码:

xhtml:

<p:dataTable id="dataTable" var="valor" value="#{beanMensagemXContato.listaContatoEmail}" 
                widgetVar="carsTable" emptyMessage="No cars found with given criteria" filteredValue="#{tableBean.filteredCars}">                           

                <f:facet name="header">  

                    </f:facet> 

                    <p:column 
                        style="max-width: 50px; min-width: 50px; overflow: hidden">
                        <f:facet name="header">
                            <h:outputText value="Contato" />
                        </f:facet>
                        <h:outputText value="#{valor.nomGrupoEmail}" />
                    </p:column>

                    <p:column
                        style="max-width: 50px; min-width: 50px; overflow: hidden">
                        <f:facet name="header">
                            <h:outputText value="Email" />
                        </f:facet>
                        <h:outputText value="#{valor.endEmail}" />
                    </p:column>

                    <p:column
                        style="max-width: 50px; min-width: 50px; overflow: hidden">
                        <f:facet name="header">
                            <h:outputText value="Telefone" />
                        </f:facet>
                        <h:outputText value="#{valor.numTelefone}" />
                    </p:column>

                    <p:column
                        style="max-width: 50px; min-width: 50px; overflow: hidden">
                        <f:facet name="header">
                            <h:outputText value="Ações" />
                        </f:facet>

                    </p:column>


                </p:dataTable>

豆子:

public List<ContatoEmail> getListaContatoEmail() {

        listaContatoEmail = new ArrayList<ContatoEmail>();
        listaContatoEmail = consultaContatoEmail.listarContatoEmail();

        return listaContatoEmail;
    }

我想要一些东西,当你在 dataTable 中输入一个单词时选择行。

谁能给我举个简单的例子。

因为我已经很感激了。

黛博拉

【问题讨论】:

    标签: java jsf primefaces


    【解决方案1】:

    好的,这是一个例子: 我将以汽车为例。

    用例:自动完成每次击键时动态更新数据表

    我的小脸:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui">
    <f:view>
        <h:head />
        <h:body>
            <h:form>
                <p:autoComplete var="carac" converter="carconvertor"
                    value="#{testBean.selectedCar}" itemLabel="#{carac.carmodel}"
                    itemValue="#{carac}"
                    completeMethod="#{testBean.complete}" process="@this"
                    onSelectUpdate="idGrid">
                    <p:ajax event="keyup" listener="#{testBean.onValueChange}"
                        update="idGrid"></p:ajax>
                </p:autoComplete>
    
                <p:dataTable value="#{testBean.matchingCarModels}" var="carmatch"
                    id="idGrid" converter="carconvertor">
                    <p:column headerText="Car Model">
                        <h:outputText value="#{carmatch.carmodel}" />
                    </p:column>
                </p:dataTable>
            </h:form>
        </h:body>
    </f:view>
    </html>
    

    汽车 POJO

    public class Car 
    {
        private String carmodel;
    
        public Car(String carmodel) {
            super();
            this.carmodel = carmodel;
        }
        // Add setters and getters
    }
    

    汽车人脸转换器

    @FacesConverter(forClass=Car.class, value="carconvertor")
    public class CarConverter 
    implements Converter {
        @Override
        public Object getAsObject(FacesContext arg0, UIComponent component, String stringvalue) {
            Car car = new Car(stringvalue);
            return car;
        }
    
        @Override
        public String getAsString(FacesContext arg0, UIComponent component, Object objectvalue) {
            Car car = (Car) objectvalue;
    
            if(car == null) {
                return StringUtils.EMPTY;
            }
    
            return car.getCarmodel();
        }
    }
    

    最后是backing bean

    @ManagedBean(name="testBean")
    @SessionScoped
    public class TestBackingBean 
    {
        /**
         * The input filter
         */
        private String filter = StringUtils.EMPTY;
    
        /**
         * Some test data
         */
        private final List<Car> carModels = new ArrayList<Car>() {
            {
                add(new Car("toyota"));
                add(new Car("honda"));
                add(new Car("suzuki"));
                add(new Car("ford"));
                add(new Car("renault"));
                add(new Car("subaru"));
            }
        };
    
        /**
         * For updating the grid.
         */
        public void onValueChange(AjaxBehaviorEvent event)
        {
            AutoComplete ac = (AutoComplete) event.getSource();
    
            Car input = (Car) ac.getValue();
    
            filter = (input == null) ? StringUtils.EMPTY : input.getCarmodel();
        }
    
        /**
         * For the auto complete drop down
         */
        public List<Car> complete(String input)
        {
            filter = input;
    
            return getMatchingCarModels();
        }
    
        /**
         * get the match
         */
        public List<Car> getMatchingCarModels()
        {
            if(StringUtils.isEmpty(filter))
                return carModels;
    
            List<Car> matches = new ArrayList<Car>();
    
            for(Car car : carModels)
            {
                if(car.getCarmodel().startsWith(filter))
                {
                    matches.add(car);
                }
            }
    
            return matches;
        }
    
        /**
         * The selected car
         */
        private Car selectedCar;
        //Add setters and getters for above member
    }
    

    HTH

    【讨论】:

      【解决方案2】:

      您可以在 stackoverflow here 中看到相同问题的解决方案

      作为搜索和捕获 keyup 事件以更新数据表的替代方法(使用自动完成)。一个符合您的上下文的示例:

      <p:autoComplete var="address"
          value="#{addressBean.address}" itemLabel="#{address.personName}"
          itemValue="#{address}" completeMethod="#{addressBean.complete}"
          process="@this" converter="personconvertor"
          onSelectUpdate="dataTable">
          <p:ajax event="keyup" listener="#{addressBean.onValueChange}"
              update="dataTable"></p:ajax>
      </p:autoComplete>
      

      【讨论】:

      • 嗨@maggu!你能发布这个自动完成的 Bean 吗?谢谢你的提示。
      • 我想看看你的 bean 中的 addressBean.onValueChange 是如何变化的。
      猜你喜欢
      • 2014-01-04
      • 2013-08-01
      • 2012-11-01
      • 2014-03-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2019-03-04
      • 2014-08-09
      相关资源
      最近更新 更多