Как добавить два разных метода к одному и тому же commandButton в JSF

У меня есть кнопка «Отправить» на странице с формой, и я использую эту форму с двух разных страниц для отправки писем. С первой страницы я вхожу в эту форму, и я должен использовать methodOne. Со второй страницы я вхожу в ту же форму и должен использовать methodTwo.

Примеры mothod выглядят следующим образом:

public Navigation methodOne(){
    return Navigation.NAVIG_ONE;
}

public Navigation methodTwo(){
    return Navigation.NAVIG_TWO;
}

и пример формы:

<h:form>
    <p:outputLabel id="email" value="#{service.Mail}"/>
    <p:inputText  id="subject" value="#{service.Subject}"/>
    <p:inputTextarea  id="body" value="#{service.Body}" />


    <p:commandButton value="send" action="#{service.methodOne}" />
</h:form>

Я хочу использовать одну и ту же форму для использования двух разных методов.

Как использовать methodOne и methodTwo в одном атрибуте action тега <p:commandButton />?


person Jorge Avila    schedule 30.10.2014    source источник
comment
ваша форма инкапсулирована в составной компонент?   -  person Yamada    schedule 30.10.2014
comment
у меня есть форма внутри xhtml-страницы с именемnotificationForm.xthml, и я использую эту страницу с двух других страниц   -  person Jorge Avila    schedule 30.10.2014
comment
Вы можете попробовать с oncomplete=#{service.methodTwo} в p:commandButton.   -  person Qadir Hussain    schedule 31.10.2014
comment
oncomplete - обратный вызов на стороне клиента для выполнения, когда запрос ajax завершен и он не может вызвать метод компонента   -  person 0x5a4d    schedule 07.11.2014
comment
@ 0x5a4d: хотя в данном случае это будет взлом, вы МОЖЕТЕ позвонить, например. удаленная команда PrimeFaces (или аналогичная) в обратном вызове   -  person Kukeltje    schedule 11.04.2015


Ответы (2)


Самое простое решение — создать переменную, по которой вы будете определять, какая страница открыта. Чтобы установить эту переменную, используйте что-то вроде этого. Эта переменная может просто хранить номер страницы, например 1,2, или имя страницы, например pageOne, pageTwo. Создайте метод, в котором будет проверяться именно эта переменная:

public Navigation navigateMethod(){
    switch (page) {
    case "pageOne":
        return Navigation.NAVIG_ONE;
        break;

    case "pageTwo":
        return Navigation.NAVIG_TWO;
        break;

    default:
        return Navigation.DEFAULT
        break;
    }
}

и ваша форма:

<h:form>
    <p:outputLabel id="email" value="#{service.Mail}"/>
    <p:inputText  id="subject" value="#{service.Subject}"/>
    <p:inputTextarea  id="body" value="#{service.Body}" />


    <p:commandButton value="send" action="#{service.navigateMethod}">
    </p:commandButton>
</h:form>
person 0x5a4d    schedule 31.10.2014

Самое чистое решение - создать составной компонент и передать выражение метода в качестве атрибута.

Смотрите также:

person Kukeltje    schedule 11.04.2015