如何将内容重新加载到primefaces对话框内的数据表中?

时间:2014-03-19 07:37:43

标签: jsf jsf-2 primefaces

我是JSF的新手,所以忽略编码异常

在对话框组件中单击搜索按钮时,数据表必须重新加载。但是当我试图做同样的事情时,表内容没有反映出来。

            <p:fieldset legend="SearchServices">
                <h:panelGrid columns="6" style="margin-bottom:10px;font-size : 9pt">

                    <h:outputLabel for="ServiceName" value="ServiceName" />
                    <h:outputLabel value="" />
                    <h:outputLabel for="serviceModule" value="ServiceModule" />
                    <h:outputLabel value="" />
                    <h:outputLabel for="ServiceGroup" value="ServiceGroup" />
                        <h:outputLabel value="" />
                    <p:inputText id="serviceName" value="#{serviceBeandata.serviceName}" />
                    <h:outputLabel value="" />
                    <p:selectOneMenu value="#{serviceBeandata.serviceModule}">
                        <f:selectItem itemLabel="None" itemValue="" />
                        <f:selectItem itemLabel="Manual entry" itemValue="Manualentry" />
                        <f:selectItem itemLabel="sfi files" itemValue="sfifiles" />
                        <f:selectItem itemLabel="liquidify management" itemValue="liquidifymanagement" />
                    </p:selectOneMenu>
                    <h:outputLabel value="" />
                    <p:selectOneMenu value="#{serviceBeandata.serviceGroup}">

                        <f:selectItem itemLabel="None" itemValue="" />
                        <f:selectItem itemLabel="payment" itemValue="payment" />
                        <f:selectItem itemLabel="Balance statements" itemValue="Balance statements" />
                        <f:selectItem itemLabel="instruments" itemValue="instruments" />
                    </p:selectOneMenu>
                    <h:outputLabel value="" />



                    <p:commandButton value="Search" action="#{serviceBeandata.searchacc()}"></p:commandButton>
                    <p:commandButton value="Reset"></p:commandButton>
                </h:panelGrid>
            </p:fieldset>

我尝试了各种属性,但我从未能得到结果。请随时指出显示的代码中可能存在的各种错误。

            <h:panelGrid columns="6">
                <p:dataTable id="services"  border="1" value="#{serviceBeandata.searchacc()}" selection="#{serviceBeandata.serviceBeandatas}"  selectionMode="multiple"
                var="Service" liveScroll="true" scrollable="true"  rowKey="#{Service.serviceName}"          
                        scrollHeight="150" scrollRows="20" emptyMessage="" >
                    <p:column headerText="ServiceName" width="200" >
                        <h:outputText value=" #{Service.serviceName}" />
                    </p:column>

                    <p:column headerText=" Servicemodule" width="200">
                        <h:outputText value=" #{Service.serviceModule}" />
                    </p:column>



                    <p:column headerText="Servicegroup" width="350">

                        <h:outputText value="  #{Service.serviceGroup}" />
                    </p:column>
                </p:dataTable>

            </h:panelGrid>
            <h:panelGrid columns="6" cellpadding="50">
                <p:commandButton value="AddSelected" action="#{serviceBeandata.loadServiceList}"  style="font-size : 9pt"></p:commandButton>
                <h:outputLabel value="" />
                <h:outputLabel value="" />

                <h:outputLabel value="" />
                <h:outputLabel value="" />
                <p:commandButton value="close" onclick="dlg1.hide()"
                    style="font-size : 9pt"></p:commandButton>
            </h:panelGrid>

    </p:dialog>

值得注意的是,该表格显示在一个arraylist中,所使用的selection属性是一个对象数组。

数据表中选择属性的代码。

public ServiceBeandata[] getServiceBeandatas() {
    return serviceBeandatas;
}

public void setServiceBeandatas(ServiceBeandata[] serviceBeandatas) {
    this.serviceBeandatas = serviceBeandatas;
}

将值加载到表中的代码(为数据表中的value属性触发的代码)

public ArrayList<ServiceBeandata> searchacc() {
    System.out.println("entered into the searchaccc");
    Servicedao serv = new Servicedao();
    /* serv_list = serv.getServiceList(); */
    serv_list = serv.search(this);
    return serv_list;
}

,其中

 public ArrayList<ServiceBeandata> search(ServiceBeandata searchParameters);

返回一个arraylist

提前谢谢

1 个答案:

答案 0 :(得分:3)

您必须使用&#39;更新&#39; commandButton的属性,您可以使用@all(重新加载所有内容),@ form(重新加载表单)或另一个元素的id等参数。以下是一些示例,我希望我能正确理解您的代码。

<h:form id="form1">

    <p:commandButton value="Update Form" action="#{fooBean.doStuff()}" update="@form" />

    <p:commandButton value="Update Table" action="#{fooBean.doStuff()}" update="table" />

    <p:dataTable id="table" value="#{fooBean.list}" var="bar">
        ....
    </p:dataTable>

</h:form>

<h:form id="form2">

    <p:commandButton value="Update table in form1" action="#{fooBean.doThings()}" update=":form1:table" />

</h:form>

正如您所看到的那样,第一个按钮会更新围绕它的整个表单,第二个按钮会使用id&#39; table&#39;更新特定元素。第三个按钮是单独的形式,因此它无法到达form1中的元素。你必须使用&#39;:&#39;离开form2,&#39; form1&#39;访问form1和finally中的组件:table以专门寻址表。所以基本上它已经超出你的形式,进入另一种形式,更新这个元素&#34;。

您的代码看起来有点不清楚,请发布只有必要的dataTable,commandButton,对话框和表单的另一个版本。尝试从数据库加载后,列表是否确实包含您想要的对象?

在一个侧节点上:你的searchacc()方法不需要返回任何内容,它只需要从数据库中加载列表。您可以将其用作void方法。