2013-10-29 48 views
0

我包括与通用ID一个模板包括与ID PARAM模板,多个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不等于?

我需要为这个

<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> 
+1

可能重复[为什么JSF多次调用getters](http://stackoverflow.com/questions/2090033/why-jsf-calls-getters-multipletimes) –

+0

嗯,好的,我怎么能绕过这个问题?我的模板包含在数据表中 – user1181110

+1

您可以在''中定义变量,只计算一次,但请注意,这将在视图构建时执行。 –

回答

0

的ID不要在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}" /> 

请注意,我也定了完全错误的方法名。