Jsf 包含id为param的模板,多个id

Jsf 包含id为param的模板,多个id,jsf,jsf-2,Jsf,Jsf 2,我包括了一个带有通用id的模板 <ui:include src="./buttons.xhtml"> <ui:param name="action" value="#{bean.nextSessionId()}" /> </ui:include> bean是可视范围的 private SecureRandom random = new SecureRandom(); public String nextSessionId() { retur

我包括了一个带有通用id的模板

<ui:include src="./buttons.xhtml">
     <ui:param name="action" value="#{bean.nextSessionId()}" />
</ui:include>
bean是可视范围的

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>  

不要在getter方法中执行业务逻辑。Getter方法应该返回已经准备好的bean属性。属性的生命周期应该由持有该属性的托管bean的作用域标识,可以是none、request、view、session或application作用域

例如



请注意,我还修复了完全错误的方法名称。

可能重复的hmm,好的,我如何绕过这个问题?我的模板包含在DataTable中。您可以在
中定义一个变量,只计算一次,但请注意,这将在视图构建时执行。
private SecureRandom random = new SecureRandom();

public String nextSessionId()
{
   return new BigInteger(130, random).toString(32);
}
<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>  
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}" />