簡體   English   中英

受管bean屬性值未設置為null

[英]Managed bean property value not set to null

我是JSF的新手,所以這個問題可能很奇怪。 我有一個inputText組件的值綁定到Float類型的托管bean的屬性。 當inputText字段為空時,我需要將屬性設置為null,而不是0值。 默認情況下未完成此操作,因此我添加了實現以下方法的轉換器:

public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException {
 if (StringUtils.isEmpty(arg2)) {
  return null;
 }

 float result = Float.parseFloat(arg2);
 if (result == 0) {
  return null;
 }
 return result;
}

我注冊了轉換器,並將其分配給inputText組件。 我記錄了arg2參數,還記錄了getAsObject方法的返回值。 通過我的日志,我可以看到它返回空值。 但是,我還在后備bean上記錄了setter屬性,並且參數為0值,而不是預期的null。 更確切地說,它是兩次調用setter屬性,一次是使用null參數,第二次是使用0值參數。

仍然將后備bean的值設置為0。如何將value設置為null?

提前致謝。

我知道這是一篇舊文章,但這對我有所幫助。 我想添加一段似乎在我的Web應用程序中有效的代碼,以設置BalusC提及的變量,而不必將其作為VM參數提供:

public class ServletContextListenerImpl 
        implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent event) {
        System.getProperties().put(
            "org.apache.el.parser.COERCE_TO_ZERO", "false");
    }
}

我不能保證部署我的Web應用程序的人員會正確地將VM參數添加到Tomcat 6啟動腳本中,因此將其嵌入到我的Webapp代碼中會更安全。 這使問題對我而言消失了。 我正在使用Apache MyFaces JSF 1.2。

在我的webapp中,問題是后備bean上的Double字段一直保持分配值0.0而不是null。

getAsObject()返回null時,還需要將組件的提交值也設置為null

if (result == null) {
    ((EditableValueHolder) component).setSubmittedValue(null);
}

但是,這有一個特定於環境的問題,即即使在getAsString()返回null ,Tomcat 6.0.16或更高版本中的EL解析器仍會在視圖側將此值強制為0。 您可以通過在Tomcat的VM參數中添加以下行來解決此問題:

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM