【问题标题】:How can I update p:column in p:panelgrid?如何更新 p:panelgrid 中的 p:column?
【发布时间】:2015-06-26 06:24:57
【问题描述】:

我在更新 panelgrid 列时遇到问题 下面是我的 xhtml 文件中的代码,treatmenthistory.xhtml 中的数据表已更新,但 searchresult.xhtml 未更新,您必须刷新整个页面以使其更新。那么问题出在哪里,两个 xhtml 页面看起来一样,它们都有数据表。

        <h:form>
            <p:panelGrid cellpadding="0" styleClass="results">
                <p:row>
                    <p:column colspan="1">
                        <ui:include src="/searchresult.xhtml" />
                    </p:column>
                    <p:column colspan="1">
                        <ui:include src="/treatmenthistory.xhtml" />
                    </p:column>
                </p:row>
            </p:panelGrid>
        </h:form>

用户:

<ui:composition xmlns="w3.org/1999/xhtml" xmlns:f="java.sun.com/jsf/core"  xmlns:h="java.sun.com/jsf/html" xmlns:ui="java.sun.com/jsf/facelets" xmlns:p="primefaces.org/ui">
    <p:dataTable id="users" var="user1" styleClass="searchResult"
        widgetVar="userTable" value="#{KisiInfoProcess.kisiList}"
        emptyMessage="#{msg['noRecordsFound']}" dynamic="true"
        paginator="true" rows="10" rowKey="#{user1.tcidno}"
        rowStyleClass="#{(rowIndex mod 2) eq 0 ? 'highlight1' : 'highlight2'}"
        rowIndexVar="rowIndex" selection="#{KisiInfoProcess.selectedOS}"
        selectionMode="single" paginatorPosition="bottom">
        <p:ajax event="rowSelect" listener="#{KisiInfoProcess.onRowSelect}"
            process="@this" update=":form:users2" />
        <f:facet name="header">
            <h:outputText value="#{msg['searchResultsPanel']}" />
        </f:facet>
        <p:column id="kisiid" sortBy="#{user1.kisiid}"
            filterBy="#{user1.kisiid}" styleClass="kisiid">

            <h:outputText value="#{user1.kisiid}" />
            <p:watermark for="@(.kisiid)" value="#{msg['protocolNo']}" />

        </p:column>
        <p:column id="ad" sortBy="#{user1.ad}" filterBy="#{user1.ad}"
            styleClass="ad">

            <h:outputText value="#{user1.ad}" />
            <p:watermark for="@(.ad)" value="#{msg['name']}" />

        </p:column>
        <p:column id="soyad" sortBy="#{user1.soyad}"
            filterBy="#{user1.soyad}" styleClass="soyad">

            <h:outputText value="#{user1.soyad}" />
            <p:watermark for="@(.soyad)" value="#{msg['surname']}" />

        </p:column>
        <p:column sortBy="#{user1.tcidno}" styleClass="tcidno"
            filterBy="#{user1.tcidno}" id="tcidno">

            <h:outputText value="#{user1.tcidno}" />
            <p:watermark for="@(.tcidno)" value="#{msg['identityNumber']}" />

        </p:column>
        <p:column sortBy="#{user1.ogrencino}" styleClass="ogrencino"
            filterBy="#{user1.ogrencino}" id="ogrencino">

            <h:outputText value="#{user1.ogrencino}" />
            <p:watermark for="@(.ogrencino)" value="#{msg['studentNumber']}" />

        </p:column>
        <p:column sortBy="#{user1.dogumtarihi}" styleClass="dogumtarihi"
            filterMatchMode="contains" filterBy="#{user1.dogumtarihi}"
            id="dogumtarihi">

            <h:outputText value="#{user1.dogumtarihi}">
                <f:convertDateTime type="date" pattern="dd/MM/yyyy" />
            </h:outputText>
            <p:watermark for="@(.dogumtarihi)" value="#{msg['dateOfBirth']}" />

        </p:column>

        <f:facet name="footer">
            <p:commandButton id="modalDialogButton" style="min-width:8%"
                value="#{msg['newPatient']}"
                action="#{KisiInfoProcess.resetHastakayit}" update=":form:basic"
                oncomplete="PF('dlg2').show()" />
        </f:facet>
    </p:dataTable>
</ui:composition>

用户2:

<ui:composition xmlns="w3.org/1999/xhtml" xmlns:f="java.sun.com/jsf/core" xmlns:h="java.sun.com/jsf/html" xmlns:ui="java.sun.com/jsf/facelets" xmlns:p="primefaces.org/ui">
    <p:growl id="msgs" showDetail="true" />
    <p:dataTable id="users2" var="user" styleClass="patienthistory"
        emptyMessage="#{msg['noRecordsFound']}" widgetVar="muayeneTable"
        value="#{KisiInfoProcess.muayeneList}" dynamic="true"
        selection="#{KisiInfoProcess.selectedOS}" paginator="true" rows="10"
        rowKey="#{user.muayeneid2}"
        rowStyleClass="#{(rowIndex mod 2) eq 0 ? 'highlight1' : 'highlight2'}"
        rowIndexVar="rowIndex" selectionMode="single"
        paginatorPosition="bottom">
        <p:ajax event="rowSelect"
            listener="#{KisiInfoProcess.onRowSelectMuayene}" process="@this"
            update=":form:panel2,:form:protocolNo"
            oncomplete="PF('dlg3').show()" />
        <f:facet name="header">
            <h:outputText value="#{msg['treatmentHistoryPanel']}" />
        </f:facet>
        <p:column sortBy="#{user.muayeneid2}" styleClass="muayeneid"
            filterBy="#{user.muayeneid2}" id="muayeneno2">

            <h:outputText value="#{user.muayeneid2}" style="width:5%" />
            <p:watermark for="@(.muayeneid)" value="#{msg['treatmentNo']}" />

        </p:column>
        <p:column sortBy="#{user.muayeneturuid2}" styleClass="muayeneturu"
            filterBy="#{user.muayeneturuid2}" id="muayeneturuid2">

            <h:outputText value="#{user.muayeneturuid2}" style="width:5%" />
            <p:watermark for="@(.muayeneturu)" value="#{msg['treatmentType']}" />

        </p:column>
        <p:column sortBy="#{user.tarih}" styleClass="tarih"
            filterMatchMode="contains" filterBy="#{user.tarih}" id="tarih">

            <h:outputText value="#{user.tarih}" style="width:5%">
                <f:convertDateTime type="both" pattern="dd/MM/yyyy - HH:mm" />
            </h:outputText>
            <p:watermark for="@(.tarih)" value="#{msg['treatmentDate']}" />

        </p:column>
        <p:column sortBy="#{user.islemiyapan}" styleClass="islemiyapan"
            filterMatchMode="contains" filterBy="#{user.islemiyapan}"
            id="userid2">

            <h:outputText value="#{user.islemiyapan}" style="width:5%" />
            <p:watermark for="@(.islemiyapan)" value="#{msg['treatmentDoctor']}" />

        </p:column>
        <p:column id="tanivarmi">

            <h:outputText style="width:5%" value="#{user.taniVarmi2}" />

        </p:column>
        <f:facet name="footer">
            <p:commandButton id="modalDialogButton2" style="min-width:8%"
                rendered="#{KisiInfoProcess.kisiSelected}"
                value="#{msg['newTreatment']}"
                action="#{KisiInfoProcess.resetMuayene}" update=":form:basic2"
                oncomplete="PF('dlg3').show()" />
        </f:facet>
    </p:dataTable>
</ui:composition>

【问题讨论】:

  • 尝试使用ajax标签&lt;p:ajax event="yourEvent" process="@this" listener="#{yourListener}" ="targetID" /&gt;
  • 我试过你的解决方案,它更新了一次,但又没有更新那部分,我不明白奇怪的问题
  • 请阅读stackoverflow.com/questions/6525050/…ui:composition 之外的标签将被忽略。所以h:form 什么都不做
  • 同样没有表单标签仍然存在问题
  • 没有?你把它们加进去了……顺便说一句,这很好,但不符合你的评论

标签: jsf primefaces


【解决方案1】:
<p:panelGrid cellpadding="0" styleClass="results" id="someID">

然后,当您执行一些操作来更改数据表时,设置 Update="someID" 以刷新两个页面。 SomeID 是你的完整 id "someNameContainer:someID"

如果您有一个操作来更新两个表,请不要忘记在更新之前您将 process="idfirstTatbe idSecondTable" 处理它们。

【讨论】:

  • &lt;p:ajax id="ajax1" listener="#{InfoProcess.resetSearch}" event="click" process="users users2" update="resultpanel" oncomplete="PF('dlg2').hide()"/&gt;
  • 我试过了,但不幸的是什么也没发生。这可能是 jsf 的错误还是与 jsf 版本有关?
  • 您的表单在哪里,resultpanel() 是您的包含机器人页面的 panelGrid 吗?是被表格包围还是两个页面都有自己的表格?您在表单上使用 prependId=false 吗?您确定您的组件的真实 ID 是用户和用户 2。你能用开发者工具或萤火虫验证吗?
  • 你不能有两个具有相同 id 的表单,你不能有 prependId=false 然后用 form:itemID 寻址元素。用一个
    (没有 id 和 prependID)包围整个 panelgrid(resultpanel),并从各个页面中删除表单。删除包含页面中的 html 标签并像这样放置 ui:composition w3.org/1999/xhtml" xmlns:f="java.sun.com/jsf/core" xmlns:h="java.sun.com/jsf/html" xmlns:ui="java.sun.com/jsf/facelets " xmlns:p="primefaces.org/ui">
  • @coderxyz24 是的,因为您正在更新 user2,所以 user2 没问题,但是您没有更新用户,所以用户不会得到更新。 (at)Kukeltje 如果你会看到他正在使用的代码更新 form:id "update=":form:panel2, :form:protocolNo"
【解决方案2】:

我解决了我自己的问题,我删除了

RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.execute("PF('userTable').clearFilters()");

现在我有另一个问题,我必须清除数据表的过滤器

@DijanaCukic 感谢 Dijana 花时间解决我的问题

【讨论】:

  • 表示感谢的最佳方式是“勾选”用户回答为“已选择”回答,和/或UpVoting他们的回答和厘米。请记住,您可以对所有您认为有帮助的答案和 cmets 进行投票。这就像免费的钱,你可以无休止地花在投票上。 Upvotes 激励用户贡献他们的知识,并帮助未来的用户快速找到对解决他们的问题有用的信息。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2014-06-01
  • 2012-05-12
相关资源
最近更新 更多