【发布时间】:2014-03-10 21:26:51
【问题描述】:
我无法让带有 f:viewAction 标记的操作方法起作用。
这是 jsf 页面:
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<ui:repeat var="genreType" value="#{navigation.genreTypeList}">
<f:metadata>
<f:viewParam name="nameEn" value="#{genreType.name_en}" required="true" />
<f:viewAction action="#{search.searchByGenreType}" />
</f:metadata>
<h:link value="#{genreType.name_de}" outcome="index" includeViewParams="true" /><br />
</ui:repeat>
</ui:composition>
它会产生这样的链接:
[...]/index.jsf;jsessionid=635562E66C7F2FA54504B53D5DAA114C?nameEn=fiction
这是豆子:
@ManagedBean
@RequestScoped
public class Search implements Serializable {
private static final long serialVersionUID = -5193732222381183093L;
private String nameEn;
public String getNameEn() {
return this.nameEn;
}
public void setNameEn(String nameEn) {
this.nameEn = nameEn;
}
// action methods
public String searchByGenreType() {
System.out.println("searchByGenreType");
return "index";
}
}
我在 Tomcat 7.0.42 中使用 JSF 2.2.5,IDE 是 Eclipse Kepler (4.3.1)。 我尝试了不同的变体(bean 中的@PostConstruct,faces-config.xml 中的显式导航,新旧命名空间)。
命名空间应该没有问题,因为这个问题自 JSF 2.2.5 起已修复。
【问题讨论】:
-
如果您在
ui:repeat之外使用f:metadata会发生什么情况? -
代码首先没有任何意义。
<ui:repeat><f:metadata>嗯?具体的功能需求是什么?也许您将<f:viewParam>与<f:param>混淆了? -
@BalusC:jsf 页面通过 ui:include 包含在模板中。现在我知道它不会那样工作。这个想法是遍历genreTypeList,所以我得到一个链接列表。每个链接都应该能够调用 action 方法。
-
好的,我发布了答案。