Пользовательские типы данных в Facelets JSF 2 Expression Language - PullRequest
0 голосов
/ 22 ноября 2011

Как отобразить пользовательское свойство, используя язык выражений Facelet?

Например:

<h:outputText value="#{contact.customTypeProperty}" />

где customTypeProperty имеет тип CustomClass, и я хочу отобразить строку, возвращаемую ее toString ()?

1 Ответ

1 голос
/ 22 ноября 2011

Это уже должно быть поведение по умолчанию.Вам не нужно ничего менять в данном примере кода, предполагая, что метод toString() правильно реализован на CustomClass.Однако, если он возвращает HTML, вам нужно добавить escape="false" к выходному тексту, чтобы предотвратить автоматический экранирование JSF (что делает для предотвращения XSS-атак на ввод, управляемый пользователем):

<h:outputText value="#{contact.customTypeProperty}" escape="false" />

Это, однако, не обязательно лучшая практика.Вы должны контролировать презентацию на стороне вида, а не на toString() на стороне модели.Например, предполагая, что CustomClass имеет в свою очередь два свойства foo и bar, и вы хотите представить его в таблице:

<h:panelGrid columns="2">
    <h:outputText value="Foo" />
    <h:outputText value="#{contact.customTypeProperty.foo}" />

    <h:outputText value="Bar" />
    <h:outputText value="#{contact.customTypeProperty.bar}" />
</h:panelGrid>

Если вы сделали это, чтобы избежать повторения кода,тогда вы должны использовать файл включения или файл тегов.Смотрите также Когда использовать, файлы тегов, составные компоненты и / или пользовательские компоненты?

...