У меня небольшая проблема с немедленным = "истина" (JSF 1.2). Моя форма касается автомобильной аварии: пользователь заполняет некоторую информацию о ubication, а затем он может добавить столько затронутых предметов, сколько пожелает (деревья, заборы, другие автомобили и т. Д.)
Фасоль
private String location;
private List<T> items;
private HtmlDataTable itemsUI;
public void remove(ActionEvent e) {
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
items.remove(Integer.parseInt(id));
}
public void add(ActionEvent e) throws InstantiationException, IllegalAccessException {
items.add(element.newInstance());
}
JSPX
<h:inputText
required="true"
value="#{ACC01.location}"/>
<h:dataTable
binding="#{ACC01.itemsUI }"
value="#{ACC01.items}"
var="item">
<h:column>
<h:selectOneMenu
value="#{item.id}>
<f:selectItems
value="#{ACC01.possibleElements}" />
</h:selectOneMenu>
<h:commandLink
actionListener="#{ACC01.remove }"
value="Remove" >
<f:param
name="id"
value="#{ACC01.itemsUI.rowIndex }"/>
</h:commandLink>
</h:column>
</h:dataTable>
<h:commandLink
actionListener="#{ACC01.add}"
value="Add" />
Проблема
Если я установлю немедленный = "true" для затронутых элементов в dataTable, когда пользователь добавляет новый элемент, другие элементы возвращаются к своим значениям по умолчанию (например, если у вас было {'tree', 'car' , 'fence'} они становятся {'default', 'default', 'default', new element})
Если я не использую немедленный, затронутые элементы сохраняют правильные значения, но пользователь вынужден заполнить поле 'location', прежде чем он сможет добавить или удалить затронутые элементы.
Я хочу, чтобы я мог сохранять значения затронутых элементов и позволять пользователю добавлять или удалять их без предварительного заполнения поля 'location'.
Обходной путь
После прочтения многих сообщений на эту тему кажется, что единственный путь - избежать автоматической проверки и выполнить ее вручную, когда пользователь отправляет форму.
Проверьте наличие пустых значений в обязательных полях и программно добавьте сообщения об ошибках в facecontext. Я действительно не хочу этого делать, потому что я думаю, что это ужасно.
Не могли бы вы предложить лучшие способы добиться нужного мне поведения?
Заранее спасибо