Правильный способ инициализации контроллера JSF с помощью пользовательского интерфейса: params - PullRequest
0 голосов
/ 13 июня 2019

У меня есть страница, которая включает 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 контроллере, называемые 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).Также неясно, какой метод запускает инициализацию.Я думаю, это в основном зависит от порядка параметров в ui:include.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...