2012-02-12 47 views
0

我可以覆蓋的<p:message ../>的默認實現總是隱有display="text"而不是時間完全打字出來的?重寫JSF Primefaces消息變量

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

只是一個想法,而不是壓倒一切的可能(也許不是)因爲你的麻煩,如果原來的 Daniel 2012-02-12 09:55:01

回答

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來隱藏圖標。因爲<p:message>for目標是不一樣的複合材料內包含

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

創建複合部件由對方的回答的建議是不完全微不足道的。

0

我會爲此創建一個Facelet組合組件。