JSF2 - 使用p:对话框重新加载弹出表,并在调用函数后关闭

时间:2016-05-03 04:11:15

标签: java primefaces xhtml

我是JSF2的新手。 我试图用p:对话框显示一个表格。 此表包含项目列表,并在行末有此删除功能。我的问题是,当它点击删除,整个页面重新加载,我的弹出表关闭。 但是,当它不在p:对话框中时,删除功能正常工作。 我的bean,无论是视图还是会话范围,都会产生相同的输出。

这是我在bean中的删除代码

public String delete(Items items) {

    getItemList.remove(items);
    return null;
}

剪切我的xhtml,

<p:dialog header="Item Table" widgetVar="popUpTbl" modal="true" >
        <h:form>
            <p:dataTable style="width:800px;height:485px;" id="popUpTbl" var="item" value="#{myBean.itemList}" >
                <p:column headerText="Item A">
                    <h:outputText value="#{item.itemA}" />
                </p:column>
                <p:column headerText="Item B">
                    <h:outputText value="#{item.itemB}" />                        
                </p:column>
                <p:column headerText="Action">
                    <h:commandLink value="Delete" action="#{myBean.delete(item)}" />
                </p:column>
            </p:dataTable>                
        </h:form>
    </p:dialog>

2 个答案:

答案 0 :(得分:1)

<h:form><p:dialog>中添加ID,并通过提供完全限定名称来更新表单,这只是:dialogId:formId的{​​{1}}并从<h:commandLink>更新一个我注意到你的对话框widgetVar和datatable的id是相同的,我在下面的例子中已经纠正了错误

 <p:dialog id="dialogId" header="Item Table" widgetVar="dialogIdWidget" modal="true" >
     <h:form id=formId>
        <p:dataTable style="width:800px;height:485px;" id="popUpTbl" 
            var="item" value="#{myBean.itemList}" >
                    .
                    .
                    .
                    <p:column headerText="Action">
                        <h:commandLink value="Delete" action="#{myBean.delete(item)}" update=":dialogId:formId" />
                    </p:column>
                </p:dataTable>                
            </h:form>
        </p:dialog>

答案 1 :(得分:0)

h:commandLink makes一个完整的帖子并重新加载整个页面,您希望使用p:commandLink默认执行的ajax。

尝试

<p:commandLink value="Delete" process="@this" update="@form" action="#{myBean.delete(item)}" />

process="@this"因为p:commandLink默认处理整个表单(您不需要)和update="@form",因为您需要使用bean数据刷新整个表单(或至少是数据表,但这相当于你的情况下的表格。

你可以保留h:commandLink并完成like here,但是它构建到p:commandLink。