在JSTL / JSP中将空字符串设置为null

时间:2013-12-10 15:55:29

标签: jsp jstl glassfish-3 web.xml

我正在Eclipse Juno和GlassFish 3.1.2.1中使用JSP / Servlet / JSTL开发Web应用程序。我需要实现的是找到一种方法将空字符串设置为null,例如。从另一个设置为空字符串的页面接收参数并将其检测为空。我一直在搜索,我在JSF中找到了一个参数,我把它放在 web.xml 中。

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

但它无效。那么我在这些方面缺少什么呢?如何将空字符串设置为null?。

作为额外的注意事项,我需要设置它,因为系统将在Websphere中工作,其中空字符串被视为null。

提前致谢。

更新

另一个例子可能是这样的:

OnePage.jsp

<form action="anotherPage.jsp">
   <input type="text" name="foo" id="idFoo" value="" />
</form>

anotherPage.jsp

<c:out value="${param.foo}"/>

在GlassFish 3.1.2.1中,c:out标签不会打印任何内容,因为该值设置为空字符串。 在Websphere Application Server中,该值为null。 我需要GlassFish显示空值而不是空字符串,就像Websphere那样。

1 个答案:

答案 0 :(得分:3)

您对JSTL表达式如何工作有误解。如果变量为NULL或事件不存在,则c:out将产生NOTHING(空)。这是JSTL表达式的规范。我不明白为什么你的WebSphere产生“null”。你需要重新检查。

例如:

  1. if foo == null - &gt;结果为空
  2. 如果foo不存在 - &gt;结果为空(无例外)
  3. 如果foo为空 - >当然结果是空的
  4. 如果foo是“null”(String)==&gt;结果是 null
  5. 对于你的情况。如果要显示NULL而不是空,则需要执行以下操作:

    <c:if test="${empty param.foo}">null
    </c:if>
    <c:if test="${not empty param.foo}">
        <c:out value="${param.foo}"/>
    </c:if>
    

    或者您可以创建JSTL函数来处理这种情况:

    <tf:outNullOrValue (param.foo) />
    

    函数outNullOrValue如下:

    public static String outNullOrValue(String s) {
        return s == null ? "null" : s;
    }
    

    当然,您需要为函数创建TLD并在JSP中声明taglib指令。