2017-02-05 2 views
0

У меня есть страница JSF с формой, содержащей несколько текстовых полей (p: inputtext) и кнопку отправки. Страница поддерживается резервным компонентом ViewScoped. Когда нажата кнопка отправки, вызывается метод действия, который возвращает пустую строку ("").Почему возврат пустой строки из метода действий не воссоздает вид?

Согласно this answer of BalusC, возврат пустой строки обновит представление и воссоздает bean-компонент ViewScoped.

Однако, когда я отправляю заполненную форму, перезагруженная страница по-прежнему сохраняет весь мой ввод текста. Как это возможно? Должна ли форма быть пустой, поскольку бэк-бэк и представление были воссозданы?

ответ

0

@ dmatob является правильным. Если у вас есть страницы JSF подкрепленная боба ViewScoped:

  • Если метод возвращает нуль, то компонент не будет воссоздан (значения остаются теми же), но страница перезагружается.
  • Если метод возвращает ту же или другую страницу, компонент будет воссоздан (он сбрасывает значения), и страница перезагружается.

Я столкнулся с тем же самым часом назад: попытка сбросить значения, когда метод успешно выполнен. Таким образом, после прочтения вокруг и вокруг, я нашел то, что, наконец, выработанный:

Вы должны использовать действие вместо ActionListener (Различия here)

<p:commandButton value="Save" action="#{backingBean.save()}" /> 

Так метод должен return a Строка

public String save(){ 
    if(validations==true){ 
    return "currentpage.xhtml?faces-redirect=true"; 
    } 
    return null; 
} 

Wh en все в порядке, оно воссоздает компонент, обновляет страницу и восстанавливает значения. В противном случае метод возвращает значение null, чтобы обновить страницу, кроме компонента.


[Изменено]

Если метод возвращает нуль или пустую строку, компонент не воссозданы: PostConstruct (INIT событие) это не срабатывает, так это означает, что значения оставайся таким же. В другом случае, если он возвращает строку (перенаправление на некоторую страницу), событие init вызывается так, что значения инициализируются.

Страница JSF перезагружается в обоих случаях: при возврате null/empty String или нет.


Надеется, что это поможет вам ... Позволь мне знать ;-)

+0

Решение находится в правильном направлении, но вы нигде не объясняете, почему поданные значения, похоже, придерживаются, даже если вид и bean-компоненты воссозданы. Это то, о чем интересовался OP. Думаю, он уже знал правильное решение отправки перенаправления. – BalusC

+0

Спасибо за ответ. Действительно, я знаю решение перенаправления, чтобы очистить форму. Но, как сказал BalusC, я хотел бы знать, почему отображаемые значения формы сохраняются, даже если bean и view воссозданы после возвращения пустой строки в методе действий (не прослушиватель!). – Quercus

+0

При возврате пустой строки или нулевого значения представленные значения остаются в стороне из-за того, что компонент не воссоздается (PostConstruct не вызывается), поэтому означает, что эти значения не инициализируются. – JairKaulitz89

-1

В представлении scobe bean, только когда ваш метод действия возвращает null, компонент не инициализируется снова.

Если вы хотите, чтобы метод действия возвращался к представленной форме и перезагружал компонент, ваш метод должен возвращать имя страницы, содержащей форму.

+0

Это был не вопрос. Более того, это уже покрывается ответом, упомянутым в ссылке в вопросе. – BalusC

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