我是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
提前谢谢
答案 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方法。