【发布时间】:2017-04-16 17:26:04
【问题描述】:
我一直在使用 p:layoutUnit 创建一个基本菜单。在我添加 p:dialog 组件之前它工作正常。在这种情况下,整个页面(包括菜单)会重新加载。我想知道防止这种情况的最佳方法是什么?我在下面创建了一个最小示例,还创建了一个视频来说明这里的问题:http://youtu.be/aUFIBFnRQdA
主页:
<h:head>
<title>Sample</title>
</h:head>
<h:body>
<p:layout style="min-width:400px;min-height:700px;">
<p:layoutUnit position="west" resizable="false" size="300" minSize="40" maxSize="200">
<h:form>
<p:menu>
<p:submenu label="Menu">
<p:menuitem value="Sample2" outcome="sample2" />
<p:menuitem value="Sample3" outcome="sample3"/>
</p:submenu>
</p:menu>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center">
<h3 style="margin-top:0">Plain Menu</h3>
<ui:insert name="source2" />
</p:layoutUnit>
</p:layout>
</h:body>
带有primefaces命令按钮的页面:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
template="sample.xhtml">
<ui:define name="source2">
<h3 style="margin-top:0">PF Button</h3>
<h:form>
<p:commandButton value="Ajax Submit" id="ajax" styleClass="ui-priority-
primary" />
</h:form>
</ui:define>
</ui:composition>
带有primefaces对话框的页面:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
template="sample.xhtml">
<ui:define name="source2">
<h3 style="margin-top:0">PF Dialog</h3>
<h:form>
<p:dialog header="Sample Dialog" widgetVar="dialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false"/>
</h:form>
</ui:define>
</ui:composition>
编辑 - 尝试在 Ajax 菜单上解决问题(失败 - 整个页面仍在刷新/更新)。
<p:layout style="min-width:400px;min-height:700px;">
<p:layoutUnit position="west" resizable="false" size="300" minSize="40"
maxSize="200">
<h:form>
<p:menu>
<p:submenu label="Menu">
<p:menuitem value="Stocks" actionListener="#
{menuView.selectStock}"/>
<p:menuitem value="Portfolio" url="portfolio.xhtml"/>
</p:submenu>
</p:menu>
</h:form>
</p:layoutUnit>
使用backing bean:
@ManagedBean
@SessionScoped
public class MenuView {
public void selectStock() {
String outcome = "stocks.xhtml?faces-redirect=true";
FacesContext context = FacesContext.getCurrentInstance();
context.getApplication().getNavigationHandler().handleNavigation(context,
null, outcome);
}
}
【问题讨论】:
-
您的菜单总是会在您使用“结果”时更新整个页面(并检查网址栏)。添加对话框时可能存在明显的问题,但这是一个不同的问题(如果有的话)。使用 ajax 作为 memu 可以部分解决这个问题,请参阅 PF 展示
-
@Kukeltje 感谢您的回复。我已经用一个尝试的解决方案编辑了我的答案,尽管整个页面似乎仍在更新。我不确定我实现它的方式是否正确。
标签: jsf jakarta-ee primefaces