我包含一个带有通用ID的模板
<ui:include src="./buttons.xhtml">
<ui:param name="action" value="#{bean.nextSessionId()}" />
</ui:include>
buttons.xhtml
<ui:composition>
hello-#{action}-#{action}
</ui:composition>
输出
hello-obcpusp90m7653vci7ohh87aa3-vcv63aj2h8h8gak3dhb5do0
bean是viewscoped
private SecureRandom random = new SecureRandom();
public String nextSessionId()
{
return new BigInteger(130, random).toString(32);
}
为什么id不等于?
我需要这个
的ID<p:commandButton id="basic#{action}" value="Basic" onclick="dlg1#{action}.show()" type="button" process="@this"/>
<p:confirmDialog id="id#{action}" widgetVar="dlg1#{action}">
<p:inputText value="....."/>
<p:commandButton oncomplete="dlg1#{action}.hide()" value="Close"/>
</p:confirmDialog>
答案 0 :(得分:0)
不要在getter方法中执行业务逻辑。 Getter方法应该返回已经准备好的 bean属性。属性的生命周期应该由持有属性的托管bean的范围来确定,该范围可以是none,request,view,session或application scoped。
E.g。
private String sessionId;
@PostConstruct
public void init() {
SecureRandom random = new SecureRandom();
sessionId = new BigInteger(130, random).toString(32);
public String getSessionId() {
return sessionId;
}
与
<ui:param name="action" value="#{bean.sessionId}" />
请注意,我还修复了完全错误的方法名称。