Наше приложение использует Mojarra 2.1.29-03, и у нас возникают проблемы с атрибутами в наших пользовательских тегах при их копировании на вложенные теги.Пользовательские атрибуты тегов попадают в детей
Например, учитывая следующее определение тега:
cc.taglib.xml
<?xml version="1.0" encoding="UTF-8" ?>
<facelet-taglib version="2.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd">
<namespace>http://temp.com/jsf/customcomponents</namespace>
<tag>
<tag-name>wrapper</tag-name>
<source>wrapper.xhtml</source>
<attribute>
<description>The style class for the component</description>
<name>styleClass</name>
</attribute>
</tag>
</facelet-taglib>
wrapper.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<ui:component xmlns:ui="http://java.sun.com/jsf/facelets">
<div style="border: 1px solid black; margin: 5px;">
<p>styleClass: #{styleClass}</p>
<ui:insert />
</div>
</ui:component>
</html>
И клиент страница:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:cc="http://temp.com/jsf/customcomponents">
<h:body>
<cc:wrapper styleClass="cc-style">
<cc:wrapper />
</cc:wrapper>
</h:body>
</html>
В результате минимумы:
styleClass: cc-style
styleClass: cc-style
... поэтому атрибут styleClass также применяется к внутреннему тегу даже если страница клиента не устанавливает его.
Мы отметили, что мы можем обойти это, обработав все клиентские страницы, чтобы установить styleClass = "", если он явно не установлен, но это подход, который мы бы хотели избежать (это очень уродливое решение и не может быть принудительно применено идти вперед).
Это ошибка? Есть ли способ обойти его, кроме упомянутого выше, желательно с обходным путем в теге, а не на клиентских страницах?
Благодаря Ivor
Большое спасибо BalusC - мы застряли на Mojarra 2.1.x, и этот обработчик недоступен в 1.11 (как вы сказали), но использование источника, с которым вы связались, устранило нашу проблему. BTW: Я знаком с составными компонентами - должен был понять, что cc будет путать. Большое вам спасибо за ваш очень быстрый и полезный ответ. – haggisandchips
Отлично. Пожалуйста :) – BalusC