不对空值调用JSF Custom Converter

不对空值调用JSF Custom Converter,第1张

不对空值调用JSF Custom Converter

您发布的链接说,转换器应使用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>

现在,您的转换器将使用空值调用!

希望对您有所帮助!



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5439509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存