Объяснение startElement и writeAttribute JSF 1.2

У меня была возможность написать несколько пользовательских рендереров для моего проекта, и они отлично работают. Однако меня несколько смущают некоторые параметры в методах ResponseWriter. Документация не очень хорошо объясняет это, поэтому я надеюсь, что один из местных экспертов JSF сможет объяснить это лучше. Конкретно:

public abstract void startElement(java.lang.String name,
                              javax.faces.component.UIComponent component)
                       throws java.io.IOException

Parameters:
    name - Name of the element to be started
    component - The UIComponent (if any) to which this element corresponds 

Что на самом деле делает этот второй параметр? Кажется, все работает нормально, передаю ли я «null» или «this» в своем рендерере?

Аналогично для writeAttribute:

public abstract void writeAttribute(java.lang.String name,
                                java.lang.Object value,
                                java.lang.String property)
                         throws java.io.IOException

Parameters:
    name - Attribute name to be added
    value - Attribute value to be added
    property - Name of the property or attribute (if any) of the UIComponent associated with the containing element, to which this generated attribute corresponds 

Почему ResponseWriter должен знать резервное свойство? Опять же, кажется, что все работает нормально, если я передаю значение null или "styleClass" при написании атрибута класса.

Любознательные умы хотят знать, и мой гугл-фу терпит неудачу в этом...


person Steve Atkinson    schedule 04.08.2012    source источник
comment
Насколько я понимаю, это в основном для целей отладки, может быть, для каких-то странных ResponseWriter реализаций. Стандартные конечно пофиг, я обычно просто прохожу null и не заморачиваюсь.   -  person doublep    schedule 05.08.2012


Ответы (1)


Стандартная реализация Mojarra ничего не делает с ними. Аргумент component для startElement() и аргумент property для writeAttribute() просто игнорируются.

Однако можно предоставить собственный модуль записи ответов. Для некоторых реальных реализаций было бы совершенно разумно знать об исходном UIComponent и/или связанном с ним свойстве UIComponent внутри модуля записи ответов.

Хотя JSF 2.0 ориентирован на JSF 2.0, хорошим примером может служить Html5ResponseWriter OmniFaces. startElement() определяет тип UIComponent несколькими проверками instanceof, прежде чем разрешить/записать некоторые определенные атрибуты HTML5.

person BalusC    schedule 06.08.2012
comment
Да, я посмотрел на ваш действительно хороший html5ResponseWriter и оставил комментарий в вашем блоге об этом. Чем раньше мы сможем перейти на WAS 8 и JSF2.0, тем лучше! - person Steve Atkinson; 06.08.2012