2015-06-23 3 views
1

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

Я пытаюсь достичь: я хочу, чтобы проверка ввода запускалась каждый раз, пользователь вводит знак в поле ввода. Но в это время модель должна быть обновлена ​​NOT. Модель должна обновляться только в том случае, если пользователь нажимает кнопку отправки. Я хочу, чтобы такое поведение улучшало наше восприятие. Пользователь должен обладать способностью, например. нажмите кнопку «Назад» в браузере, и его изменения не привязаны к модели. Также я хочу, чтобы пользователь видел вовремя, если он вводит какую-то чушь.

В настоящее время мой JSF-файл выглядит следующим образом:

<h:inputText 
     required="true" 
     requiredMessage="Please enter a value." 
     id="input_value" value="#{myBean.myValue}" 
     styleClass="input" 
     validatorMessage="Please enter a value." > 
     <f:ajax 
      event="keyup" 
      execute="input_value" 
      render="input_value"/> 
    </h:inputText> 

Это запускает проверку каждый раз, когда пользователь вводит знак в поле ввода. Но он также обновляет модель. И это не то, что я хочу.

+0

Почему бы не использовать «временную/рабочую» модель, которая на отправке копируется в реальную модель? Я использую этот шаблон во многих случаях, и он хорошо работает для нас. – Kukeltje

+0

Да, это был мой подход. Но сначала я хотел проверить, есть ли более разумное решение. – Sneek

ответ

1

Это невозможно. По крайней мере, не без взлома в JSF impl.

К счастью, вы упомянули X вашего XY-problem так что это может быть разумно ответил:

Я хочу, чтобы это поведение для лучшего userexperience. Пользователь должен обладать способностью, например. нажать кнопку Back-в браузере и его изменения не привязаны к модели

Чтобы решить это, просто настроить браузер никогда не кэшировать динамические страницы. Подробную информацию можно найти в этом документе Q & A: Avoid back button on JSF web application. Вам также необходимо убедиться, что вы выбрали правильную область видимости для данных, которые она хранит. То есть не ставьте данные с областью видимости в компоненте, включенном в сеанс. Эти бобы формы должны быть в лучшем случае видимыми. См. Также How to choose the right bean scope?

+0

А теперь мой боб, который держит модель, является SessionScoped. Я думаю, что если я перейду на ViewScoped, он будет работать так же, как и я. Если я перейду на ViewScoped, я могу проверять ввод каждый раз, когда пользователь вводит знак в текстовое поле. Это также может обновить модель, но это не имеет значения, поскольку в следующий раз, когда будет отображаться представление, bean будет воссоздан (потому что его ViewScoped ?!). Я прав? – Sneek

+0

Да, но убедитесь, что это не в какой-либо фиксации, так как он будет стиклом в db – Kukeltje

+0

Не знаете, что вы подразумеваете с помощью?? !, но просто попробуйте понаблюдать за собой. Это также очень подробно описано в последнем сообщении выше. Я предлагаю щелкнуть эту ссылку, если вы хотите узнать, как выбрать правильную область видимости. – BalusC

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