2016-01-13 8 views
1

На странице, созданной с использованием JSF, JSTL и Trinidad, у меня есть тег, называемый множеством атрибутов.Как я могу огибать что-то в элементе HTML условно

<tr:selectBooleanRadio 
     group="#{groupId}" 
     id="#{groupId}_#{Id}_radio" 
     selected="#{value.yesterday}" 
     text="#{msg.ib_selectTimeIntervalRadio_yesterday_label}" 
     shortDesc="#{ib:fn_coalesce(title,label)}" 
     simple="#{ib:fn_coalesce(simple,true)}" 
     styleClass="#{ib:fn_coalesce(styleClass,'selectTimeIntervalRadio')}"/> 

Я хочу, чтобы показать его в <td> элемента или непосредственно, условно. Теперь я делаю это как:

<c:when test="#{not horizontal}"> 
    <tr> 
     <td> 
      <tr....> 
     </td> 
    </tr> 
</c:when> 
<c:when test="#{horizontal}"> 
    <tr...> 
</c:when> 

Таким образом, я повторяю один и тот же фрагмент кода дважды, что явно плохо. Что я могу сделать?

IMHO, бесполезно создавать новый пользовательский компонент для tr ... call-call, который будет иметь все те же проблемы.

Может быть, я могу оформить один тег в другой условно? Могу я?

Другой способ может быть таким: поместить тэг tr ... в какую-то переменную и использовать при построении с этой переменной. Может быть, это возможно?

Вы знаете, как избежать этого дублирования кода?

ответ

2

Если вы используете устаревший JSP, оберните его в <f:verbatim>.

<f:verbatim rendered="#{not horizontal}"><tr><td></f:verbatim> 
    <tr:selectBooleanRadio ... /> 
<f:verbatim rendered="#{not horizontal}"></td></tr></f:verbatim> 

Если вы используете JSPX или Facelets, которая будет производить ошибку XML на вышеуказанной конструкции, которая является незаконным в XML, избежать его в <h:outputText escape="false">.

<h:outputText value="&lt;tr&gt;&lt;td&gt;" escape="false" rendered="#{not horizontal}" /> 
    <tr:selectBooleanRadio ... /> 
<h:outputText value="&lt;/td&gt;&lt;/tr&gt;" escape="false" rendered="#{not horizontal}" /> 
+0

Для последнего мне нужно объявить xmlns: h = "http://java.sun.com/jsf/html". Выглядит грязно. Первый вариант гораздо более сочувствующий, что я делаю для этого f :, пожалуйста? – Gangnus

+0

Как ответил, в Facelets это не сработает. Это обычный стандартный тег, кстати, только устарел с JSF 2.0. – BalusC

+0

Я уже проверил :-(И есть ли еще какое-то более чистое решение? Что-то вроде огибающей элемента при условии? – Gangnus

 Смежные вопросы

  • Нет связанных вопросов^_^