2010-09-20 2 views
1

Я создал тег Facelet для рендеринга textinput с меткой. Это очень полезно, когда вы избегаете повторения одного и того же кода снова и снова.Каков наилучший способ создания параметризованных многоцелевых пользовательских тегов facelet

Хотя я борюсь с обработкой различных случаев использования в рамках этой одной вкладки (дата против текста, требуется против не требуется, текстовое поле против нормального текста и т.д.)

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

<h:inputText  
      onblur="makeNotEmpty(this)" 
      onfocus="makeNotEmptyFocus(this)" 
      id="#{cid}" 
      value="#{value}" 
      rendered="#{textarea!='true' and type!='email' and notrequired!='true' and nullablenumber!='true'}" 
      style="#{style }" 
      required="true" 
      disabled="#{disabled }">   
      <f:validator validatorId="notnull"/>  

    </h:inputText> 
    <h:inputText      
     onblur="  
      makeNotEmpty(this)" 
     onfocus="makeNotEmptyFocus(this)" 
     id="#{cid}" 
     value="#{value}" 
     rendered="#{type=='email'}" 
     style="#{style }" 
     required="true" 
     disabled="#{disabled }">    
     <f:validator validatorId="email" /> 
     <f:validator validatorId="notnull"/> 
    </h:inputText> 

конечно это не оптимальным и довольно утомительно писать. Еще одна проблема, я думаю, что, используя этот подход, у меня есть несколько компонентов с одинаковым идентификатором в дереве компонентов (я не уверен, что это проблема, поскольку только один элемент, имеющий один и тот же идентификатор, отображается в одно время, но я видел некоторые странные проблемы, воссоздающие дерево страниц, из-за чего мне кажется, что это проблема)

Я использую ICEFaces 1.8.2 (но проблема должна быть независимой от реализации). Какое решение для этого? С помощью ? Что-то другое? Благодаря!

ответ

1

Вы можете поставить <f:validator> в JSTL <c:if>. Он будет создан во время создания тега.

<html xmlns:c="http://java.sun.com/jsp/jstl/core"> 
... 
<c:if test="#{type eq email}"><f:validator validatorId="email" /></c:if> 

Кстати, ICEfaces не реализация JSF, это JSF библиотека компонент, который должен работать на вершине реализации JSF .. Mojarra и MyFaces являются JSF реализации.

+0

спасибо, вот как я это сделаю. и я никогда не называл ICEfaces реализацией JSF;) моя оригинальная проблема не была решена этим, хотя ... Я нашел проблему: было ли то, что ICEFaces, похоже, имеют проблемы, когда у вас есть со связыванием и когда эта группа Panel содержит компоненты facelet. Имея этот сценарий, у меня всегда возникала проблема, что дерево компонентов было полностью перепутано, когда страница была перестроена (в первый раз я посещал страницу). С перепутанным я имею в виду, что некоторые элементы управления вообще не показывались или метки отображались как кнопки aso. Вероятно, ошибка IceFaces – hugri

+0

Ваша фраза * Я использую ICEFaces 1.8.2 (но проблема должна быть независимой от реализации) * был предлагая, что. Далее я не занимаюсь IceFaces, поэтому не могу подробно остановиться на этой проблеме. – BalusC

+0

никаких проблем, спасибо в любом случае! – hugri