我是否可以覆盖<p:message ../>
的默认实现,始终隐式拥有display="text"
而不是及时输入?
<p:message for="hotelName" display="text" />
答案 0 :(得分:4)
您可以为此扩展PrimeFaces'MessageRenderer
。只需覆盖encodeEnd()
方法,在调用super方法之前设置默认属性。
这是一个自包含的启动示例:
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是绝对必要的):
<render-kit>
<renderer>
<component-family>org.primefaces.component</component-family>
<renderer-type>org.primefaces.component.MessageRenderer</renderer-type>
<renderer-class>com.example.CustomMessageRenderer</renderer-class>
</renderer>
</render-kit>
但更容易的是只需要一点点CSS来隐藏图标。
.ui-message-error-icon {
display: none;
}
根据其他答案的建议创建复合组件并不是一件容易的事,因为for
的{{1}}目标不包含在同一个组合中。
答案 1 :(得分:0)
我只是为此创建一个Facelet组合组件。