我是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>
答案 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。