Переопределение тега сообщения JSF Primefaces - PullRequest
0 голосов
/ 12 февраля 2012

Могу ли я переопределить реализацию по умолчанию <p:message ../>, чтобы всегда неявно иметь display="text" вместо полного ввода во времени?

<p:message for="hotelName" display="text" />

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012

Вы можете расширить PrimeFaces '1001 * для этого. Просто переопределите метод encodeEnd(), в котором вы устанавливаете атрибут по умолчанию перед вызовом супер-метода.

Вот самодостаточный стартовый пример:

package com.example;

import java.io.IOException;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.primefaces.component.message.MessageRenderer;

public class CustomMessageRenderer extends MessageRenderer {

    @Override
    public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
        component.getAttributes().put("display", "text"); // You might want to check first if it isn't already set.
        super.encodeEnd(facesContext, component);
    }

}

, который необходимо зарегистрировать в faces-config.xml следующим образом (нет, магия аннотаций не будет работать при переопределении существующих средств визуализации, которые сами по себе зарегистрированы в XML, поэтому XML абсолютно необходим):

* * 1010

Но проще было бы просто добавить немного CSS, чтобы скрыть значок.

.ui-message-error-icon {
    display: none;
}

Создание составного компонента, как следует из другого ответа, не совсем тривиально, поскольку цель for для <p:message> не содержится в том же составном.

0 голосов
/ 13 февраля 2012

Я бы просто создал для этого Компонент Композиции Facelet.

...