Не будет ли Primefaces автоматически генерировать идентификатор для HTML-тега JSF? - PullRequest
0 голосов
/ 11 марта 2019

Сегодня я обнаружил интересную вещь с тегом в JSF. Я получил эту точку из комментария BalusC :

<h:form>
    <h:outputText value="#{bean.text1}" styleClass="myClass" />
    <p:commandButton value="Update" update="@(.myClass)" /> 
</h:form>

Но будет работать следующий пример (обратите внимание, что присвоение идентификатору формы не обязательно):

<h:form>
    <h:outputText id="myText" value="#{bean.text1}" styleClass="myClass" />
    <p:commandButton value="Update" update="@(.myClass)" /> 
</h:form>

Кажется, что Primefaces не будет генерировать идентификатор для простого HTML-тега . Я пробовал с несколькими компонентами, но все еще не уверен. Итак, мой вывод правильный? Если да, то почему это поведение?

1 Ответ

3 голосов
/ 11 марта 2019

Предположим, вы спрашиваете, почему нет атрибута ID в элементе <span>, отображаемом <h:outputText value="#{bean.text1}" styleClass="myClass" />:

По умолчанию компонент h:outputText, отображаемый с помощью com.sun.faces.renderkit.html_basic.TextRenderer (в случае Mojarra), не отображает идентификатор. Независимо от того, отображается ли идентификатор, определяется com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.shouldWriteIdAttribute(UIComponent) прямо здесь :

/**
     * @param component
     *            the component of interest
     *
     * @return true if this renderer should render an id attribute.
     */
    protected boolean shouldWriteIdAttribute(UIComponent component) {

        // By default we only write the id attribute if:
        //
        // - We have a non-auto-generated id, or...
        // - We have client behaviors.
        //
        // We assume that if client behaviors are present, they
        // may need access to the id (AjaxBehavior certainly does).

        String id;
        return (null != (id = component.getId()) && (!id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX)
                || ((component instanceof ClientBehaviorHolder) && !((ClientBehaviorHolder) component).getClientBehaviors().isEmpty())));
}

Все это простой JSF и не имеет никакого отношения к простым лицам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...