Пользовательский компонент Facelet - предотвращение рендеринга - PullRequest
1 голос
/ 03 декабря 2010

Прочитав этот ответ , я все еще в замешательстве.Я согласен с тем, что JSTL следует избегать и понять, как его оценка происходит на неправильной фазе.Однако, согласно документации на сайте разработки Facelets, теги <ui:fragment> поддерживают только два атрибута, id и binding.Таким образом, даже если какая-то реализация поддерживает rendered, кажется, что вы будете искушать судьбу, чтобы использовать это.Другое предложение состояло в том, чтобы использовать <h:panelGroup>, однако, который вставляет в ответ элемент <div>, который может вызвать нежелательные побочные эффекты (например, изменение содержимого с встроенного на блокирующий).Кто-нибудь знает способ обойти это?В частности, я пытаюсь сделать следующее:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns:ice="http://www.icesoft.com/icefaces/component" 
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets">
  <ui:composition> 
    <ice:selectOneListbox binding="#{binding}" rendered="#{modeExisting}">
      <f:selectItems
        value="#{binding.allTagsSelectItems}" />
    </ice:selectOneListbox>
    <ice:inputText binding="#{binding.name}" />
    <ice:inputText binding="#{binding.description}" />
  </ui:composition> 
</html>

По сути, это список, используемый для выбора элемента с именем и описанием, который при выборе позволит пользователю редактировать их.Я мог бы поставить <ice:panelGroup> вокруг блока и использовать его визуализированный атрибут, но опять же, могут быть побочные эффекты от добавления этого дополнительного div.Есть ли способ заставить это работать?

Также, возможно, стоит упомянуть, что я использую вышеупомянутый пользовательский компонент в паре с этим facelet-taglib:

<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC 
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" 
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> 

<facelet-taglib>
  <namespace>http://www.mitre.org/asias/jsf</namespace>
  <tag>
    <tag-name>configurationTagEditor</tag-name>
    <source>../component/configurationTagEditor.xhtml</source>
  </tag>
  <tag>
    <tag-name>configurationTagSelector</tag-name>
    <source>../component/configurationTagSelector.xhtml</source>
  </tag>
  <tag>
    <tag-name>configurationTagRegexTable</tag-name>
    <source>../component/configurationTagRegexTable.xhtml</source>
  </tag>
</facelet-taglib>

Чтобы позволить мнеиспользуйте это в моем jsf xhtml:

...
<ice:panelTab label="Existing" styleClass="configurationTagsExisting">
  <m:configurationTagEditor tag="#{configuration.existingTag}" />
</ice:panelTab>
...

1 Ответ

0 голосов
/ 03 декабря 2010

Другое предложение состояло в том, чтобы использовать <h:panelGroup>, однако, чтобы вставить в ответ элемент <div>

сделать <div> по умолчанию.Это только делает это, если вы добавляете layout="block".Для всех других атрибутов HTML (например, id, styleClass и т. Д.) Он отображает только <span>.Если атрибут layout отсутствует, а все остальные атрибуты HTML отсутствуют, он выводит ничто .

...