<ui:insert>
<ui:include src="#{PopUpBean.includeUrl}">
<ui:param name="includeParam" id="includeParam" value="HalloWert!" />
</ui:include>
</ui:insert>
这就是我尝试接受参数的方式,我在调试器的帮助下查找了每个变量,但似乎ui:param值似乎没有传递:
private void init () {
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext ectx = ctx.getExternalContext();
Object o = ectx.getRequestParameterMap().get("includeParam");
Object request = ectx.getRequest();
}
@PostConstruct
public void postContruction () {
this.init();
}
谢谢你的帮助!
答案 0 :(得分:2)
找到解决方案;
HtmlOutputLabel ob = (HtmlOutputLabel) UiTreeWalker.findComponent(FacesContext.getCurrentInstance().getViewRoot(), "hiddenValue");
ValueExpression vb = ob.getValueExpression("value");
Object value = vb.getValue(FacesContext.getCurrentInstance().getELContext());
隐藏值是一个outputLabel,其render = false
这背后的想法是你可以将参数放在JSF页面上的隐藏值中,然后你可以从这个java片段中访问该参数。
答案 1 :(得分:1)
我找到了另一种从UI发送信息的方法:在JSF 2.2中包含Bean。通过设置隐藏值并引用bean中的方法。 例如:
<ui:include src="/toInclude.xhtml">
<ui:param name="idValue"
value="#{masterBean.idValue}" />
</ui:include>
不需要使用:在此文件的初始行。 这个隐藏的参数将首先放入,将按顺序在bean中进行设置。 在toInclude.xhtml中将是:
<h:inputHidden id="idValue"
value="#{toIncludeBean.putIdValue(idValue)}" />
在Bean中:
@Named(value = "toIncludeBean")
@Scope("view")
public class ToIncludeBean {
private String value;
public void putIdValue(String idValue) {
//This is in my bean
this.setValue(idValue);
}
}