JSF. Преобразовать значение для отображения h: commandLink - PullRequest
4 голосов
/ 23 мая 2011

Я передаю Status объект в значение h: commandLink. Так и отображается на странице. Проблема в том, что отображаемая строка

packages.entity.Status@db2674c8.

Я создал конвертер для Status с аннотацией

@FacesConverter(forClass = Status.class, value = "statusConverter")

но это не работает. Я попытался явно установить его:

<h:commandLink value="#{result.status}" action="/view">
    <f:converter converterId="statusConverter" />
</h:commandLink>

Тогда я получил ошибку: /search-form.xhtml @57,58 <f:converter> Parent not an instance of ValueHolder: javax.faces.component.html.HtmlCommandLink@53e387f3

что вполне верно, h:commandLink не ValueHolder. Есть ли способ конвертировать значение для h:commandLink?

Ответы [ 3 ]

11 голосов
/ 23 мая 2011

Интересно, что я интуитивно ожидаю, что это сработает здесь, но UICommand действительно не расширяет UIOutput (в то время как UIInput работает). Возможно, стоит запросить улучшение для мальчиков JSF.

Вы можете обойти эту проблему, отобразив ее с помощью <h:outputText>.

<h:commandLink action="/view">
    <h:outputText value="#{result.status}">
        <f:converter converterId="statusConverter" />
    </h:outputText>
</h:commandLink>

Или просто без явного <f:converter>, поскольку у вас уже есть forClass=Status.class

<h:commandLink action="/view">
    <h:outputText value="#{result.status}" />
</h:commandLink>
0 голосов
/ 23 мая 2011

Как вы указали, h: commandLink не является ValueHolder, поэтому он не поддерживает конвертер. Атрибут value фактически определяет отображаемый текст.

Преобразователи используются для преобразования значения, которое является объектом, в строку для представления в html, а затем, с другой стороны, для преобразования этой строки обратно в экземпляр объекта.

В вашем примере я предполагаю, что result.status - это объект, который вы хотите преобразовать в строку? Если это так, вам может понадобиться ссылка на фактический атрибут String объекта, например:

<h:commandLink value="#{result.status.statusMessage}" action="/view" />
0 голосов
/ 23 мая 2011

Преобразователи не могут быть подключены к компонентам команд (h: commandLink, h: commandButton)

Для этого вы можете создать составной компонент или использовать метод в компоненте поддержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...