Пользовательский компонент Facelet - предотвращение рендеринга
Прочитав этот ответ, я все еще в тупике. Я согласен с тем, что 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 ответ
Другое предложение было использовать
<h:panelGroup>
Однако это вставляет<div>
элемент в ответе
<h:panelGroup>
не рендерит <div>
по умолчанию. Это только делает это, если вы добавляете layout="block"
, Для всех других атрибутов HTML (например, id
, styleClass
и т. д.), это только делает <span>
, Если нет layout
атрибут присутствует, а все остальные атрибуты HTML отсутствуют, он ничего не отображает.