2012-05-09 5 views
13

Я использую JSF 1.2<ч: outputtext> печатает HTML как есть вместо фактического HTML

Я пытаюсь напечатать текст с помощью <h:outputtext>

<h:outputText id="warningDose" styleClass="redText" value="#{templatePrescriptionMaintenanceBackingBean.doseWarningText}"></h:outputText> 

Теперь эта переменная содержит текст с HTML-теги. <b>, <i> и т. Д.

Но это отображает содержимое, как оно есть вместо фактического жирного или курсивного вывода html.

Есть ли способ сделать это <h:outputText> таким, чтобы он дал html-ответ?

ответ

33

Вы должны установить в час: outputText тег:

escape="false" 

Но помните, что смешивание «вида» конструкции (то есть, создавая строку с HTML-тегами) между странице просмотра JSF и лежащий в основе фасоль - это нехорошая практика. Вся информация о представлении должна отображаться на странице просмотра.

+0

Почему именно это это плохая практика, не могли бы вы доработать на том, что даже если у меня есть * полный * контроль над сгенерированной HTML? код? – jpangamarca

+0

@jpangamarca по той же причине, почему MVC - хорошая практика. Он позволяет делать представления с использованием определенного языка (например, html, фрагменты, freemarker и т. д.) и не позволяет модели не знать о разных представлениях. Иногда было бы удобнее создавать определенные «модели» для просмотра и делать это на Java, но, как правило, этого лучше избегать, поскольку Java не подходит (и код обычно выглядит довольно уродливым) для описания представлений. Надеюсь, это имеет смысл. – Stef

+0

Спасибо @Stef. Как только я был вынужден вывести HTML в неэкранированном h: outputText в ячейках сетки, не смог сделать facelet, потому что страница была плохо спроектирована, и мне не разрешили ее перепроектировать (стили CSS были применены идентификаторами компонентов , yuck!), поэтому идентификаторы будут дублированы, и страница будет взорваться. Благодарю. – jpangamarca

6

Просто установите его, чтобы не убежать.

<h:outputText id="warningDose" escape="false" styleClass="redText" value="#{templatePrescriptionMaintenanceBackingBean.doseWarningText}"></h:outputText> 
1

У меня была очень похожая проблема. Мой вопрос here

Моя страница XHTML выглядит -

<h:outputText itemEscaped="false" escape="false" value="#{singleViewResultDO.associatedCode}" /> 

associatedCode получает значение из запроса SQL, где я хочу использовать HTML тег, чтобы иметь условный стиль.

Вот мой SQL-запрос выглядит следующим образом:

Select A, REPLACE(Wm_Concat(DISTINCT CASE WHEN sv.rmvd = 0 THEN ' '||sv.CMPNION_CD ELSE '<span style=\"color:red; \">' || ' '||sv.CMPNION_CD|| '</span>' END),' , ','') , " 
from Table 

Игнорирует REPLACE и WM_CONCAT как для отображения значений, разделенных запятыми. Кусок кода соответствующего является

CASE WHEN sv.rmvd = 0 THEN ' '||sv.CMPNION_CD ELSE '<span style=\"color:red; \">' || ' '||sv.CMPNION_CD|| '</span>' END 

Я хочу иметь тег на основе состояния rmvd = 0 .. Так как, я бежать = «ложь» в моем, мне не нужно, чтобы избежать моих HTML-теги в запрос. То, что я имею в виду не нужно конвертировать < в <> в > и ""

отметить также, что, поскольку у меня есть двойные кавычки„“в моем пролете, мне нужно, чтобы избежать его один раз, так что не будет экранирована, когда она достигает

Я получаю свой выход по желанию -.? 8000778 в красном цвете