JSF EL将字符串属性设置为null

时间:2013-07-01 14:54:21

标签: java-ee jsf-2 el

我在bean中有一个字符串字段borderColor,我不想使用EL设置为null,但它总是被强制转换为空字符串。

<p:inputText value="#{axis.borderColor}" rendered="#{axis.borderColor != null}">
    <p:ajax update=":form:plot"/>
</p:inputText>

<p:commandButton value="#{msg.initialize}" action="#{axis.setBorderColor( 'cccccc' )}" rendered="#{axis.borderColor == null}" update=":form:mainTabs:axesSettings :form:plot"/>
<p:commandButton value="#{msg.reset}" rendered="#{axis.borderColor != null}" update=":form:mainTabs:axesSettings :form:plot">
    <f:setPropertyActionListener target="#{axis.borderColor}" value="#{null}" />
</p:commandButton>
  • 如果borderColor为空,则显示“初始化”按钮。
  • 如果borderColor不为空,我会显示一个文本字段,用户可以在其中键入CSS颜色和“重置”按钮。当按下重置按钮时,我想将borderColor设置为null(我实际上使用的是PrimeFaces p:colorPicker而不是文本字段,但问题是相同的。)

我已经阅读了所有关于javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL的内容,我认为添加上下文参数可以解决问题,但它没有任何影响。似乎由setPropertyActionListener提供的空值由于某种原因被转换为空字符串。

我正在使用GlassFish 4.0和PrimeFaces 4.0-SNAPSHOT

2 个答案:

答案 0 :(得分:2)

您不需要将null值传递给属性。您可以使用eq验证空字符串或空字符串

<p:inputText value="#{axis.borderColor}" rendered="#{not empty axis.borderColor}">
    <p:ajax update=":form:plot"/>
</p:inputText>

答案 1 :(得分:1)

您必须在web.xml中执行以下设置以强制设置null,这在JSF2中默认不会发生。

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>