В последнее время я разрабатываю несколько приложений JSF, и меня беспокоит несогласованность API-интерфейсов веб-компонентов.
Я заметил, что при вызове .getValue() или .getSubmittedValue() в объекте компонента JSF в коде на стороне сервера существует чрезвычайно непредсказуемое поведение. Иногда, когда я вызываю .getValue() в раскрывающемся списке, я заметил, что получаю значение, поскольку это было до того, как я выбрал свое значение (так что значение из последнего обновления страницы), из которого .getSubmittedValue() получает меня правильное значение, как таковое:
UIInput name = new UIInput(); // This is the control I have in a bean.
public void submit(ActionEvent ae)
{
someMethod(name.getValue().toString()); // Retrieves the "old" value
someMethod(name.getSubmittedValue().toString()); // Retrieves the correct value
}
Кроме того, я заметил, что вызов .getSubmittedValue() в поле формы иногда приводит к исключению нулевого указателя, потому что это значение не было создано в объекте компонента, и в этом случае, когда я вызываю .getValue() в этом Я получаю правильное значение, например:
HtmlInputText name = new HtmlInputText(); // This is the control I have in a bean.
public void submit(ActionEvent ae)
{
someMethod(name.getValue().toString()); // Retrieves the correct value
someMethod(name.getSubmittedValue().toString()); // Throws NullPointerException
}
Это просто "причуда" структуры JSF, или я просто неправильно использую API ПОЛНОСТЬЮ? Любое понимание этих двух методов было бы весьма полезно. Приветствия.