用ui:params初始化JSF控制器的正确方法

时间:2019-06-13 08:19:31

标签: jsf jsf-2.2

我有一个页面,其中包含x.xhtml,并通过了2个ui:param

<p:outputPanel>
    <ui:include src="x.xhtml">
        <ui:param name="a" value="a" />
        <ui:param name="b" value="b" />
    </ui:include>
</p:outputPanel>

x.xhtml在其开头声明了2个c:set,它们将参数设置到名为@ViewScoped的{​​{1}}控制器中。

current

<c:set target="#{current}" value="#{a}" property="a" /> <c:set target="#{current}" value="#{b}" property="b" /> setA(A a)方法将被调用以设置这些属性。

setB(B b)

我正在控制器中寻找一个可以同时设置两个参数的地方。我不需要将它们作为属性。他们应该初始化控制器。我宁愿不在模板中使用它们。我宁愿不要将它们作为字段。我宁愿删除二传手。

问题在于无法从构造函数,@ViewScoped class CurrentViewController { private A a; private B b; public void setB(B b) { this.b = b; } public void setA(A a) { this.a = a; } } 方法或我知道的任何其他机制中访问它们。它们可以在相应的设置器中访问,但可以分别访问。

@PostConstruct

public void setB(B b) { // I have to check if this.a is already set if (this.a != null) { // I can do my initialisation: this.a and b are ready } // I have to set a field because setA would do the same trick } 看起来和setA(A a)一样难看。还不清楚哪种方法触发初始化。我猜这主要取决于setB(B b)中参数的顺序。

0 个答案:

没有答案