Управляемый bean-компонент и actionListener - PullRequest
6 голосов
/ 06 октября 2011

Я хочу выполнить несколько действий над разными управляемыми bean-компонентами с помощью одной и той же кнопки, одна из которых находится в области видимости, а другая - в запросе. В моем примере я использую один и тот же компонент для обоих.

index.xhtml

    <h:form>
        <p:commandButton image="ui-icon ui-icon-notice" action="#{controller.inc()}" update="result">
            <f:actionListener type="controller.Controller" />
        </p:commandButton>
    </h:form>

    <p:panel id="result">
        #{controller.count}
    </p:panel>

controller.Controller.java

@Named(value = "controller")
@SessionScoped
public class Controller implements ActionListener, Serializable
{
    int count = 0;

    public Controller(){
        System.out.println("new");
    }

    public void inc(){
        count += 1;
    }

    public int getCount(){
        return count;
    }

    @Override
    public void processAction(ActionEvent event) throws AbortProcessingException{
        count += 1000;
    }
}

Когда я нажимаю кнопку, счет увеличивается на 1 вместо 1001 и создает новый компонент. Что я сделал не так?

Спасибо.

1 Ответ

8 голосов
/ 06 октября 2011

Это ожидаемое поведение.<f:actionListener type> создает и получает свой собственный экземпляр компонента в каждом объявлении.Он не использует тот же bean-объект области действия, которым управляет JSF.

Вместо этого вам нужно использовать binding для привязки к уже созданному экземпляру bean-объекта области действия.

<f:actionListener binding="#{controller}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...