2013-12-14 8 views
0

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

<h:commandButton type="button" action="#{loginBean.withdraw}" id="thousand" class="buttons"  style="top:180px;left:570px;"> 
    <f:setPropertyActionListener target="#{loginBean.withdrawAmount}" value="1000" /> 
</h:commandButton> 

public class LoginBean { 

     int withdrawAmount; 

Этот метод работает только тогда, когда я опускаю type="button" от commandButton, но с type="button" он не работает, и я не знаю, почему.

Мне нужен type="button", чтобы быть там, есть ли способ сохранить его и по-прежнему заставить его работать?

ответ

2

Существует ошибка в вашем facelet сниппета:

  • Существует нет таких атрибута, как class для <h:commandButton>. Возможно, вы имели в виду styleClass.

Что касается проблемы у вас есть, вы должны:

Либо обеспечивают метод установки для withdrawAmount собственности

public void setWithdrawAmount(int withdrawAmount) { 
    this.withdrawAmount = withdrawAmount; 
} 

и ваш facelet должен выглядеть следующим образом:

<h:commandButton type="submit" 
       action="#{loginBean.withdraw}" 
       id="thousand" 
       styleClass="buttons" 
       style="top:180px;left:570px;"> 
    <f:setPropertyActionListener target="#{loginBean.withdrawAmount}" 
           value="1000" /> 
</h:commandButton> 

Или, вы можете избавиться от <f:setPropertyActionListener> и добавить инструкцию, чтобы изменить значение withdrawAmount в качестве первой строки метода #{loginBean.withdraw}.

В этом случае ваш facelet фрагмент кода должен выглядеть следующим образом:

<h:commandButton type="submit" 
       action="#{loginBean.withdraw}" 
       id="thousand" 
       styleClass="buttons" 
       style="top:180px;left:570px;" /> 

и ваш метод LoginBean#withdraw() должен начать с утверждением, что изменяет withdrawAmount значение:

public String withdraw() { 
    this.withdrawAmount = 1000; 
    //the remaining logic. 
} 

Лично я бы предпочел первый вариант.


Подробнее:

+1

'button' является [действительным вариантом] (http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/). Это вариант, используемый для запуска запросов GET – kolossus

2

type является вся причина, почему вы с этим вопросом. Я отправляю этот ответ, потому что принятый ответ не объясняет , почему вы столкнулись с проблемой.

<h:commandButton/> предназначен для работы в 3-х режимах:

  • submit: Это режим по умолчанию, что кнопка находится в положении. Этот режим отправляет HTTP-запрос POST на сервер, который запускает жизненный цикл обработки запросов JSF. Только этот режим позволяет вам запускать методы бэк-компонента (используя атрибуты action или actionListener).

  • button: Этот режим запускает запрос GET в приложении. По мере того как запросы GET идут, этот режим в основном подходит для навигации, т. Е. Запрашивает другое представление или страницу. В этом режиме нет простого/простого способа выполнить резервный код компонента или запустить цикл обработки запросов JSF. Это ваш текущий вопрос

  • reset: Этот режим просто сбрасывает значение всех входных компонентов в его ограждающих <h:form/>

Ссылка:

Смежные вопросы