我在使用f:viewAction
in时发现了一个奇怪的行为ui:composition
。
我有一个包含作文的主页。在这两个页面中,我都定义了一个 f:viewAction,但是在加载页面时,只有主页中的一个被触发。
这是我使用的代码示例:
主要.xhtml
<h:head>
<h:outputLabel value="Test page*******" />
</h:head>
<h:body>
<ui:include src="/pages/include.xhtml" />
</h:body>
</html>
包含.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<f:metadata>
<f:viewAction action="#{sample.actionTest2}" />
</f:metadata>
<h:outputLabel value="Include" />
</ui:composition>
样品豆
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "sample")
@SessionScoped
public class SampleBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 2458168772774828175L;
public void actionTest1() {
System.out.println("Test1");
}
public void actionTest2() {
System.out.println("Test2");
}
}
只有sample.actionTest1被调用。
JSF 版本是 Mojarra 2.2.8-02
我正在编辑我的问题以详细解释我的情况。在上一个问题中,为了简单起见,我省略了我只需要渲染内容部分的事实。
修改后的主页面为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<f:metadata>
<f:viewAction action="#{sample.actionTest1}" />
</f:metadata>
<h:head>
<h:outputLabel value="Test page*******" />
<h:form>
<h:commandLink value="Refresh content">
<f:ajax render=":content" />
</h:commandLink>
</h:form>
</h:head>
<h:body>
<h:panelGroup id="content">
<ui:include src="/pages/include.xhtml" />
</h:panelGroup>
</h:body>
</html>
如您所见,当单击命令链接时,必须只呈现内容。在这种情况下,是否有可能f:viewAction
在渲染之前执行某些操作?现在我正在使用f:event
它,它工作得很好。