У меня есть следующий вид:Почему подача формы не работает?
<h:form>
<h:selectManyListbox value="#{reports.selectedCategories}"
converter="#{categoryConverter}">
<f:selectItems value="#{reports.categories}"/>
</h:selectManyListbox>
<h:commandButton value="Submit" action="#{reports.action}" />
</h:form>
Я использую пользовательский конвертер для преобразования категории в строку и наоборот:
public class CategoryConverter implements Converter {
@Autowired
private CategoryService categoryService;
public Object getAsObject(FacesContext context, UIComponent component, String value) {
System.out.println ("CONVERTER: GET AS OBJECT");
return categoryService.findByName (value);
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
System.out.println ("CONVERTER: GET AS STRING");
return ((Category) value).getName();
}
}
И, наконец, мой код защитный боба:
public class ReportsController {
private Category[] selectedCategories;
public void setSelectedCategories (Category[] categories) {
System.out.println ("SET CATEGORIES");
this.selectedCategories = categories;
}
public Category[] getSelectedCategories() {
System.out.println ("GET CATEGORIES");
return selectedCategories;
}
public void action() {
System.err.println ("ACTION");
}
....
//methods for accessing data
}
Когда я запустите мое приложение, я вижу правильный список с двумя элементами и кнопкой «Отправить». Но когда я нажимаю кнопку, ничего не происходит. Единственным выходом, который я вижу, является:
GET CATEGORIES
CONVERTER: GET AS STRING
CONVERTER: GET AS STRING
Ни один метод SetSelectedCategories() и action() никогда не вызывается. И я не понимаю, почему. Какие-либо предложения?
UPD: проблема еще более глупа: когда я прокомментировал все материалы, относящиеся к классу категорий (например, мой selectManyListbox, мой конвертер, все связанные сеттеры и геттеры) и оставил действие только метода, он все равно не вызывается.
<h:form>
<h:commandButton value="Submit" action="#{reports.action}" />
</h:form>
UPD2: вот выход из фазы слушателя
START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
END PHASE INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
GET STR
END PHASE RENDER_RESPONSE 6
Кажется, что все фазы работали нормально, но на самом деле это не так. Я немного смущен.
@ Roman - Вы пытались изменить подпись метода «действие» в соответствии с моими изменениями? – McDowell
Да, я попытался вернуть нулевую, пустую строку и, наконец, строку «действие», которая отображается в навигационных правилах, и ничего не изменилось в результате (( – Roman
Это не мой проект, и он уже содержит некоторые весенние вещи безопасности, возможно, проблема заключается в том, что я не знаю.Если я разработал проект с нуля, то код _all_ будет работать так, как ожидалось. – Roman