в случае, если f:viewParam привязан к конвертеру, зачем нам Converter#getAsString

Скажем, у меня есть следующее определение f:viewParam:

<f:metadata>
    <f:viewParam name="cust-id" value="#{CustomerCEVController.customer}" 
        converter="#{customerConverter}" converterMessage="Unknown customer, please use a link from within the system."
        required="true" requiredMessage="cust-id f:viewParam not present"
    />
</f:metadata>

Я перехожу на нужную страницу с параметром "?cust-id=2342" в URL-адресе, поэтому роль метода getAsObject в преобразователе заключается в том, чтобы явно создать экземпляр поля Customer в компоненте поддержки ( например, выполнив запрос к БД на основе значения cust-id). Что мне не очень понятно, так это то, зачем нам нужен метод getAsString и как он используется. Это не вопрос роли getAsString в конвертерах в обычном случае, т. е. в привязке между элементами пользовательского интерфейса представления .xhtml и вспомогательным компонентом, где их роль прост. Я также прочитал здесь, что мы можем обрабатывать < strong>f:viewParam в качестве элемента ввода пользовательского интерфейса для параметров GET, но роль преобразователя в обратном направлении для меня не имеет смысла.


person Marcus Junius Brutus    schedule 02.08.2012    source источник


Ответы (1)


getAsString() действительно не используется в случае <f:viewParam>, но существующий преобразователь можно повторно использовать для других компонентов, где действительно используется getAsString().

E.g.

<h:outputText value="#{CustomerCEVController.customer}" converter="#{customerConverter}" />

or

<h:selectOneMenu value="#{CustomerCEVController.customer}" converter="#{customerConverter}">
    <f:selectItems value="#{data.customers}" />
</h:selectOneMenu>

Вам решать, реализовывать ли getAsString() в соответствии с его контракт или нет. Если вы этого не сделаете, то ваш преобразователь вообще нельзя будет повторно использовать для других компонентов.

person BalusC    schedule 02.08.2012
comment
Как ни странно, при использовании Mojarra 2.1.23 конвертер, привязанный к <f:viewParam> при боковой загрузке, вызывает 5 раз getAsString. Видел такое поведение, когда пытался создать исключение UnsupportedOperationException в упомянутом методе. - person djmj; 23.08.2013