0

我包含了一个带有通用 ID 的模板

<ui:include src="./buttons.xhtml">
     <ui:param name="action" value="#{bean.nextSessionId()}" />
</ui:include>

按钮.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>  
4

1 回答 1

0

不要在 getter 方法中做业务逻辑。Getter 方法应该返回已经准备好的bean 属性。属性的生命周期应该由持有该属性的托管 bean 的范围来标识,它可以是无、请求、视图、会话或应用程序范围。

例如

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}" />

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

于 2013-10-30T13:34:15.227 回答