您发布的链接说,转换器应使用null,但不会说在每种情况下使用null值都会调用转换器。
具体来说,它并不表示当转换器 位于a内h:outputText
且值为null 时将调用转换器。
如果您挖掘Mojarra的资源,您将看到:
//Line 355 -- com.sun.faces.renderkit.html_basic.HtmlBasicRenderer//method getCurrentValue Object currentObj = getValue(component); if (currentObj != null) { currentValue = getFormattedValue(context, component, currentObj); }
显然,空值将永远不会被转换!而且我找不到解决方法。
然后,如果您 真的需要 将值设置为null(可以返回0或类似的值),我认为唯一的机会就是制作自定义渲染器。这很简单:
您编写的渲染器将覆盖重要的方法:
package my;import javax.faces.component.UIComponent;import javax.faces.component.UIInput;import javax.faces.context.FacesContext;import com.sun.faces.renderkit.html_basic.TextRenderer;public class HtmlCustomRenderer extends TextRenderer { @Override public String getCurrentValue(FacesContext context, UIComponent component) { if (component instanceof UIInput) { Object submittedValue = ((UIInput) component).getSubmittedValue(); if (submittedValue != null) { // value may not be a String... return submittedValue.toString(); } } String currentValue = null; Object currentObj = getValue(component); //Remove the 'if' to call getFormattedValue even if null currentValue = getFormattedValue(context, component, currentObj); return currentValue; }}
然后我们在faces-config.xml中声明渲染器:
<render-kit> <renderer> <component-family>javax.faces.Output</component-family> <renderer-type>javax.faces.Text</renderer-type> <renderer-class>my.HtmlCustomRenderer</renderer-class> </renderer></render-kit>
现在,您的转换器将使用空值调用!
希望对您有所帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)