我在JSF页面中有一个commandLinks列表,其中每个commandLink都设置到content.xhtml页面中的相应页面。
问题:在下面的commandLink
列表中,只有最后一个成功运行:
<ui:composition>
<h:form>
<ul class="nav nav-sidebar">
<li>
<h:commandLink value="Title1" >
<f:param value="#{pageBean.setPage('title1')}" />
</h:commandLink>
</li>
<li>
<h:commandLink value="Title2" >
<f:param value="#{pageBean.setPage('title2')}" />
</h:commandLink>
</li>
<li>
<h:commandLink value="Title3" >
<f:param value="#{pageBean.setPage('title3')}" />
</h:commandLink>
</li>
</ul>
</h:form>
每How can I pass selected row to commandLink inside dataTable?项目编号2,我知道需要访问请求参数映射。在这种情况下<f:param>
这是正确的吗?如何使用正确的标题页设置下面的一个页面?
content.xhtml
<ui:composition>
<div class="container-fluid">
<div class="row">
<div id="target" class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<ui:insert name="content" >
<ui:include src="/WEB-INF/includes/#{pageBean.page}.xhtml" />
</ui:insert>
</div>
</div>
</div>
</ui:composition>
PageBean
@ManagedBean
@ViewScoped
public class PageBean implements Serializable {
private String page;
@PostConstruct
public void init() {
page = "title1"; // Default include.
}
//getter & setter
}
与问题相关:当PageBean是在title1内的RequestScoped事件正常工作但commandLinks失败时。当PageBean是title1中的ViewScoped事件时不起作用,我只有最后一个commandLink工作。
我做错了什么?感谢。
编辑(根据下面提到的教程):
<li>
<h:commandLink value="Title1" action="#{pageBean.setPage}" >
<f:param name="action" value="title1" />
</h:commandLink>
</li>
以下方法不称为
public void setPage() {
Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String page = params.get("action");
System.out.println("page " + page);
this.page = page;
}