В настоящее время я работаю над проектом JSF 1.2 (реализация IBM и «уровень компании»).
ПРОБЛЕМА
Вот ситуация (количество предметов только для примера), простой CRUD
- Элемент списка
- У меня есть список предметов
- Я нажимаю на пункт 2, чтобы увидеть детали
- Я нажимаю изменить, на странице модификации отображаются значения элемента 2
- Вернуться к списку с помощью кнопки «Назад» и
immediate="true"
(потому что мы не хотим вносить изменения)
- Деталь позиции 4
- Изменить элемент 4> Отображаются значения элемента 2
НО
- если я установлю атрибут «немедленное» кнопки «Назад» на
false
, значения элемента 4 будут в порядке.
- если я установлю для «отключенного» атрибута компонента inputText значение
true
, значение элемента 4 будет в порядке.
- , если я использую
<h:outputText value="#{item4.myValue}/>
(UIOutput) вместо <h:inputText value="#{item4.myValue}/>
(UIInput)
Кроме того, я проверил в режиме отладки, что bean-компонент, который я хотел отобразить, был "item 4", и это было.
Что я нашел
После некоторых исследований в Google я обнаружил, что эта проблема возникает из жизненного цикла JSF , хотя найденная документация и решения относятся к конкретным реализациям JSF.
Так что я думаю, это потому, что значение заполняется с помощью localValue вместо submitValue (@see интерфейс EditableValueHolder может помочь в понимании), и на этих страницах есть некоторые решения
РЕЗУЛЬТАТ
Это не работает (меня бы здесь не было, клянусь ^^).
Решение «Обновить» неэффективно.
«Стереть вход» страшно. Я не могу признать, что мне нужно ссылаться на каждое поле ввода! Кроме того, я не нашел метод setSubmittedValue()
для UIInput в моем IBM JSF.
«Чистый» метод неэффективен. Я попробовал один элемент и полное дерево компонентов с этим кодом
public void cleanAllChildren(List<UIComponentBase> list){
for(UIComponentBase c : list){
this.cleanAllChildren(c.getChildren());
c.getChildren().clear();
}
}
Но безуспешно. И вот я здесь.
Я что-то пропустил? Есть ли хорошее хитрое решение, которое я не видел? Я не очень знаком с жизненным циклом JSF.