亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在ap:dialog中顯示p:dataTable中當前行的詳細信息并保存后進行更新

如何在ap:dialog中顯示p:dataTable中當前行的詳細信息并保存后進行更新

DIEA 2019-10-12 09:46:27
我有一個JSF 2應用程序,該應用程序有兩個頁面,一個頁面列出學生,一個頁面顯示給定學生的詳細信息。列表頁面在學生表的每一行中都有一個指向詳細信息頁面的鏈接,單擊該鏈接可在瀏覽器中打開一個新選項卡以顯示這些詳細信息?,F在,需求已更改為不再在新選項卡中顯示詳細信息,而是在列表頁面的模式對話框中顯示。我的想法是簡單地將詳細信息頁面內容嵌入到模式對話框中,以使列表頁面不會變得太大和難以維護。從這里開始我的懷疑。經過研究后,我將清單各行中的鏈接更改為以下按鈕:<p:commandButton value="Details" type="button"                 onclick="PF('dialog-details').show()"></p:commandButton>該對話框聲明如下:<p:dialog widgetVar="dialog-details" header="Details" modal="true" width="95%">    <ui:include src="student_details.xhtml">        <ui:param name="id" value="#{student.id}"/>    </ui:include></p:dialog>最后,詳細信息頁面更改為如下所示:<ui:composition    xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"    xmlns:ui="http://java.sun.com/jsf/facelets">    <f:metadata>        <f:viewParam name="id" value="#{studentBean.id}" />    </f:metadata>    <h1 class="title ui-widget-header ui-corner-all">Details of #{studentBean.bean.name} / #{studentBean.bean.number}</h1></ui:composition>                       當我單擊按鈕時,對話框真正顯示出來,內容是詳細信息頁面。我在對話框中看到以下內容:Details of  / 完全沒有錯誤,但是應該顯示的數據卻沒有。設置了一個斷點StudentBean.setId()(此方法將加載一個以bean與Student傳遞的ID對應的實例命名的屬性),但是它絕不會命中。經過一段時間的思考,我開始理解為什么它不起作用。傳遞到詳細信息頁面的參數student.id,但student所使用的名稱為var中<p:datatable/>,顯示所有的學生,所以student是無效在<p:dialog/>這之外<p:datatable/>。因此,我需要的是一種使用給定行中相應學生的ID顯示對話框的方法。理想情況下,我希望在這里進行ajax調用,因此僅在需要時才加載詳細信息。有任何想法嗎?
查看完整描述

1 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

該按鈕應該是一個ajax按鈕,它設置Bean中當前迭代的實體,然后更新對話框的內容,并最終顯示它。該對話框應僅引用bean中的該實體,并在保存時更新列表和表。


這是一個啟動示例:


<h:form id="master">

    <p:dataTable value="#{bean.entities}" var="entity">

        <p:column>#{entity.property1}</p:column>

        <p:column>#{entity.property2}</p:column>

        <p:column>#{entity.property3}</p:column>

        ...

        <p:column>

            <p:commandButton value="View" action="#{bean.setEntity(entity)}" 

                update=":detail" oncomplete="PF('detail').show()" />

        </p:column>

    </p:dataTable>

</h:form>


<p:dialog id="detail" widgetVar="detail">

    <h:form>

        <p:inputText value="#{bean.entity.property1}" />

        <p:inputText value="#{bean.entity.property2}" />

        <p:inputText value="#{bean.entity.property3}" />

        ...

        <p:button value="Close" onclick="PF('detail').hide(); return false" />

        <p:commandButton value="Save" action="#{bean.save}" 

            update=":master" oncomplete="PF('detail').hide()" />

    </h:form>

</p:dialog>

將其放入一個@ViewScopedbean中:


private List<Entity> entities; // +getter

private Entity entity; // +getter+setter


@EJB

private EntityService entityService;


@PostConstruct

public void load() {

    entities = entityService.list();

    entity = null;

}


public void save() {

    entityService.save(entity);

    load();

}


查看完整回答
反對 回復 2019-10-12
  • 1 回答
  • 0 關注
  • 346 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號