2015-10-30 2 views
0

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

  <h:inputText label="Name" value="#{req.test}" required="true"/> 
      <h:inputText label="Details" value="#{req.tests2}" readonly="true" required="true"/> 

      <h:selectBooleanCheckbox label="Hide field" value="#{req.bool1}"/> 
      <ui:fragment rendered="#{not req.bool1}"> 
       <h:inputText label="Hidden" value="#{req.test3}" required="true"/> 
      </ui:fragment> 

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


Проблема заключается в том, что при обработке проверки, RenderResponse вызывается в Jsf жизненного цикла. Таким образом, фаза значений модели обновления пропущена, и я не могу реагировать на ввод пользователя.

В дополнение к этому: Если я заполняю все required поля с галочкой (форма будет действительным) и снимите флажок (в required поле "Hidden" появляется), я не просто сделать "Hidden" снова исчезнуть, проверяя флажок, потому что "Hidden" не может быть пустым как required поле. Даже если Я говорю required="#{not req.bool1}", он не работает, так как значение флажка никогда не достигает моей модели, потому что фаза значения модели обновления пропущена.

Что мы сейчас сделали, это обертывание контекста лиц, чтобы предотвратить вызов renderResponse() во время фазы проверки от установки флага. (Да, опасно, да, мне нужен лучший способ сделать это.) Теперь, наконец, модель обновлена, BUT: Обязательные поля остаются пустыми, потому что по какой-то причине jsf решил, что required полей не нужно чтобы получить их ценность от моей модели, пока они пусты/недействительны.

  1. Как я могу сделать мою модель значения появляться в required полях?
  2. Есть простой и правильный способ решить мой игнорируемых недействителен-государственно-продолжать-с-фаз-должным образом проблемы, кроме основном предотвращение renderResponse() от происходящего?
+0

Добавить поддержку ajax в ваш h: selectBooleanCheckbox Элемент пользовательского интерфейса: event = "click" render = "id", с рендерингом @form или родителем фрагмента –

+0

Итак, вы имеете в виду, что мне нужно будет обновлять форму каждый раз, когда я меняю некоторые поле, которое изменяет значения обязательных полей в моей модели? К сожалению, это не работает, потому что, как я уже сказал по какой-то причине, jsf решил, что пустым полям не нужно обновлять их значение от модели. Каждое другое поле показывает его значение, только обязательные поля остаются пустыми. – Neepsnikeep

+0

Но спасибо за подсказку с ajax ... Я делаю это в коде сейчас. После сброса компонента он корректно обновляется: 'UIInput ui = ... получить поле reqired по id; ui.resetValue(); Ajax.update (ui.getClientId()); ' Теперь значения показывают. Поля по-прежнему имеют недопустимый статус, поскольку на этапе проверки они все еще были пустыми, но хорошо. Я могу жить с этим на данный момент, я думаю ... Но разве обходной путь действительно единственный способ пометить поля недействительными и по-прежнему реагировать на другие пользовательские ввода? Мое решение кажется слишком сложным, чтобы сделать такую ​​основную вещь. – Neepsnikeep

ответ

0

Таким образом, ответ на первый вопрос: сбросьте значение и обновите ТО, затем я получу значения, которые будут отображаться в необходимых полях. Спасибо Васил!

Что касается второго вопроса: интересно, как это возможно, никто раньше не сталкивался с проблемой. Это только я? Ну, я думаю, я не понимаю и использую жизненный цикл неправильно или что-то в этом роде. Но я действительно думал, что представление должно реагировать на ввод пользователя, даже если некоторые поля по-прежнему пусты. Пользователь по-прежнему вставляет данные в конце концов, и мы еще не движемся дальше. Полям разрешено быть пустым в этом состоянии. Я предполагаю, что это точка, и мое «обязательное» означает нечто иное, чем «требуется» jsf. Я все еще не получаю стандартный процесс проверки в этом отношении ...

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

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