在primefaces中刷新页面的方法是什么? 我试过了
<p:commandLink actionListener="#{legendcontroller.addEditLegendType(true,false)}" update="legendform:pnlform" >Add Legend</p:commandLink>
<p:commandLink immediate="true" actionListener="#{legendcontroller.addEditLegendType(false,false)}" update="legendform:pnlform" >View Legend </p:commandLink>
<p:commandLink id="editLink" value="Edit" actionListener="#{legendcontroller.editLegendType(legendtype)}" update=":legendform:pnlform" process="@this"/>
第三个会在带有datatable的页面中生成错误。我得到的错误:
无法找到“jnid22:legendviewdatatable:0:editLink”中引用的表达式为“pnlform”的组件。我想在编辑并打开editpanel时刷新表单。我想点击删除时只想刷新数据表。
完整的html:
<?xml version='1.0' encoding='UTF-8' ?>
<!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:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:head>
<title>Legend</title>
</h:head>
<h:body>
<ui:composition template="/generalTemplate.xhtml">
<ui:define name="title">Legend </ui:define>
<ui:define name="content" >
<f:view>
<h:form id="legendform" prependId="false" >
<p:panel id="pnlform">
<f:facet name="header">
<p:commandLink actionListener="#{legendcontroller.addEditLegendType(true,false)}" update="legendform:pnlform" >Add Legend</p:commandLink>
<p:commandLink immediate="true" actionListener="#{legendcontroller.addEditLegendType(false,false)}" update="legendform:pnlform" >View Legend </p:commandLink>
</f:facet>
<p:panel id="addeditpnl" rendered="#{legendcontroller.addLegendBool or legendcontroller.editLegendBool}" style="width:100%">
<h:panelGrid columns="2" >
<h:outputLabel value="Legend Name" for="legendname" />
<h:inputText id="legendname" value="#{legendcontroller.legendType.legendname}" title="Legendname" required="true" requiredMessage="The Legendname field is required."/>
<h:outputLabel value="Legend Description" for="legendDesc" />
<h:inputText id="legendDesc" value="#{legendcontroller.legendType.legendDesc}" title="LegendDesc" />
<h:outputLabel value="Legend For" for="legendfor" />
<h:inputText id="legendfor" value="#{legendcontroller.legendType.legendfor}" title="Legendfor" required="true" requiredMessage="The Legendfor field is required."/>
</h:panelGrid>
<p:dataTable id="addeditdtable" value="#{legendcontroller.legendType.legendList}" var="legend" style="width:100%">
<p:column>
<f:facet name="header">
<h:outputText value="Legend SN"/>
</f:facet>
<h:inputText value="#{legend.legendSn}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="LegendDesc"/>
</f:facet>
<h:inputText value="#{legend.legendDesc}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Lower Range"/>
</f:facet>
<h:inputText value="#{legend.lowerrange}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Upper Range"/>
</f:facet>
<h:inputText value="#{legend.upperrange}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Color"/>
</f:facet>
<p:colorPicker value="#{legend.color}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="ADD/Delete"/>
</f:facet>
<p:commandLink value="Add" actionListener="#{legendcontroller.addLegendAfter(legend)}" update="addeditdtable" process="@this"/>
<h:outputText value=" / "/>
<p:commandLink value="Delete" actionListener="#{legendcontroller.removeLegendDTO(legend)}" update="addeditdtable" process="@this"/>
</p:column>
<f:facet name="footer">
<p:commandButton value="SAVE" action="#{legendcontroller.saveLegend()}"/>
</f:facet>
</p:dataTable>
</p:panel>
<p:dataTable id="legendviewdatatable" value="#{legendcontroller.allLegendType()}" rendered="#{!legendcontroller.addLegendBool and !legendcontroller.editLegendBool}" var="legendtype" style="width:100%">
<p:column>
<f:facet name="header">
<h:outputText value="Legendname"/>
</f:facet>
<h:outputText value="#{legendtype.legendname}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="LegendDesc"/>
</f:facet>
<h:outputText value="#{legendtype.legendDesc}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Legendfor"/>
</f:facet>
<h:outputText value="#{legendtype.legendfor}"/>
</p:column>
<p:column id="editDelCol">
<f:facet name="header">
<h:outputText value="Edit/Delete"/>
</f:facet>
<p:commandLink id="editLink" value="Edit" actionListener="#{legendcontroller.editLegendType(legendtype)}" update=":legendform:pnlform" process="@this"/>
<h:outputText value=" / "/>
<p:commandLink id="deleteLink" value="Delete" actionListener="#{legendcontroller.deleteLegendType(legendtype)}" update="legendviewdatatable" process="@this" />
</p:column>
</p:dataTable>
</p:panel>
</h:form>
</f:view>
</ui:define>
</ui:composition >
</h:body>
</html>
最后,我发现primefaces没有使用id给出但使用随机id:
<form id="j_idt12" name="j_idt12" method="post" action="/Configuration/LegendManager/LegendType.xhtml" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt12" value="j_idt12">
<div id="j_idt12:j_idt13" class="ui-toolbar ui-widget ui-widget-header ui-corner-all ui-helper-clearfix"><div class="ui-toolbar-group-left"><button id="j_idt12:j_idt15" name="j_idt12:j_idt15" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left" title="Welcome" type="submit" role="button" aria-disabled="false"><span class="ui-button-icon-left ui-icon ui-c ui-icon-disk"></span><span class="ui-button-text ui-c">Home</span></button><button id="j_idt12:j_idt16" name="j_idt12:j_idt16" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left" title="Configuration" type="submit" role="button" aria-disabled="false"><span class="ui-button-icon-left ui-icon ui-c ui-icon-disk"></span><span class="ui-button-text ui-c">Configuration</span></button></div><div class="ui-toolbar-group-right"><span id="j_idt12:j_idt18" class="ui-menubutton"><button id="j_idt12:j_idt18_button" name="j_idt12:j_idt18_button" type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-left" role="button" aria-disabled="false"><span class="ui-button-icon-left ui-icon ui-c ui-icon-triangle-1-s"></span><span class="ui-button-text ui-c">sugandha</span></button></span></div></div><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="2044288989474132123:952602282947229034" autocomplete="off">
</form>
答案 0 :(得分:1)
由于您使用了prependId="false"
,因此您应该仅使用update="pnlform"
,或删除prependId="false"
,这样您就可以保留update="yourformname:yourid"
或update=":yourid"
。
更多信息:
答案 1 :(得分:1)
更改您的代码,如下所示:<h:form id="legendform" prependId="true" >
或没有prependId
属性,然后引用此表单中的嵌套组件,其中包含来自其他任何位置的update=":legendform:pnlform"
属性。
在您的情况下,如果您要设置prependId=false
,然后以相同的形式从<datatable>
内的嵌套组件引用,则应使用update=":pnlform"
进行更新。
这是因为<datatable>
拥有自己的NamingContainer