我有一个使用ui:include的基页来包含另一个页面。 ui:include使用ui:param将参数传递给包含的页面。 param在包含页面的控制器的PostConstruct方法中读取。
此设计正常工作,直到我将复合组件添加到基页;一旦添加,包含的页面控制器报告ui:param的值为null。一旦我从页面中删除了复合组件,就可以通过包含页面的控制器读取ui:param(即非空)。请帮忙!
要重现问题的文件:
myPage.xhtml
<html xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:mycomponents="http://java.sun.com/jsf/composite/mycomponents">
<ui:include src="includePage.xhtml">
<ui:param name="myParam" value="myValue"/>
</ui:include>
<p/>
<mycomponents:myComponent/>
</html>
myIncludedPage.xhtml
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets">
The value of the param is: #{includedPageController.myParam}
</ui:composition>
myComponent.xhtml (置于“资源/ mycomponents”中)
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface/>
<composite:implementation>
I am the composite component
</composite:implementation>
</html>
IncludedPageController.java
@ManagedBean
public class IncludePageController
{
String myParam;
@PostConstruct
private void init()
{
FaceletContext faceletContext = (FaceletContext)FacesContext.getCurrentInstance().
getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
myParam = (String)faceletContext.getAttribute("myParam");
}
public String getMyParam()
{
return myParam;
}
public void setMyParam(String myParam)
{
this.myParam = myParam;
}
}
答案 0 :(得分:0)
请参阅:How do I set Managed Bean field to the value of a ui:param?。在JSF API中没有做这种事情的标准。应使用复合或自定义组件,而不是include / param标签组合。