【问题标题】:Set empty string as null in JSTL/JSP在 JSTL/JSP 中将空字符串设置为 null
【发布时间】:2013-12-28 05:47:14
【问题描述】:

我正在使用 Eclipse Juno 和 GlassFish 3.1.2.1 中的 JSP/Servlet/JSTL 开发一个 Web 应用程序。我需要实现的是找到一种方法将空字符串设置为空,例如从另一个页面接收一个设置为空字符串的参数并将其检测为空。我一直在搜索,我在 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>

另一个页面.jsp

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

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

【问题讨论】:

  • 不确定是否理解您的问题。如果参数值为空,您想使用 request.getParameter 方法将参数值转换为 NULL 吗?
  • 我在描述中添加了另一个我需要的示例,谢谢:)

标签: jsp jstl glassfish-3 web.xml


【解决方案1】:

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

例如:

  1. 如果 foo == null --> 结果为空
  2. 如果 foo 不存在 --> 结果为空(无异常)
  3. 如果 foo 为空 --> 结果当然为空
  4. 如果 foo 为 "null" (String) ==> 结果为 null

对于您的情况。如果你想显示 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 指令。

【讨论】:

    猜你喜欢
    • 2020-01-14
    • 2012-01-25
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2013-07-12
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多