我无法使用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 =小说
这是豆子:
@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以来修复的。
答案 0 :(得分:2)
这段代码没有任何意义。您似乎将<f:viewParam>
与<f:param>
混为一谈。您需要<f:param>
将HTTP请求参数添加到链接。 <f:viewParam>
用于将传入的HTTP请求参数设置为bean属性。
鉴于具有带参数的链接列表的具体功能要求,而这些参数反过来应该在目标页面上将参数设置为bean属性并调用bean动作,以下是您应该如何实现它:
包含链接列表的源页面:
<ui:repeat var="genreType" value="#{navigation.genreTypeList}">
<h:link value="#{genreType.name_de}" outcome="index">
<f:param name="nameEn" value="#{genreType.name_en}" />
</h:link>
<br />
</ui:repeat>
在目标网页中,显然是index.xhtml
,将其置于顶部,就在<h:head>
之前:
<f:metadata>
<f:viewParam name="nameEn" value="#{search.nameEn}" required="true" />
<f:viewAction action="#{search.searchByGenreType}" />
</f:metadata>
在searchByGenreType()
方法中,您可以直接访问该nameEn
媒体资源。