我可以覆盖默认实现吗<p:message ../>
总是隐含地拥有display="text"
而不是及时完整地输入?
<p:message for="hotelName" display="text" />
您可以扩展 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
的目标<p:message>
不包含在同一组合中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)