在没有JSTL的EL中打印简单字符串

时间:2011-11-21 20:42:55

标签: java jsp el

我不确定我是否可以这样做,但我正在尝试仅使用表达式语言打印字符串(无JSTL)。该字符串经常是空的,我想要一个空字符串打印到HTML而不是单词“null”。这就是我正在尝试的(没有成功):

<%
  myString = "";
  myString = someMethodThatMayReturnNull(); // returns string or null
%>
<b>${myString}</b><br />
<b>${ (empty myString) ? "myString-is-empty" : "myString-is-NOT-empty" }</b><br />

我不想使用JSTL的原因是因为我正在尝试对相当大的系统进行最小的更改。

3 个答案:

答案 0 :(得分:1)

Scriptlets 和EL不共享相同的变量范围。您需要准备EL变量作为页面,请求,会话或应用程序范围的属性。就像你现在一样,总是为空。

<%
  myString = "";
  myString = someMethodThatMayReturnNull(); // returns string or null
  request.setAttribute("myString", myString); // It's now available by ${myString}
%>

请注意,您通常在Servlet内执行 Scriptlet 部分。另请注意EL is null-safe,所以任何真正null的内容,即if (object == null)都会通过,那么根本就不会打印出来。

或者,如果您的具体问题是它在浏览器中按字面意思打印${myString}等等,当它与JSTL <c:out>一起使用时,则表示您不是使用与JSP 2.0兼容的servlet容器,或者您的webapp的web.xml未声明符合至少 Servlet 2.4,或者您isElIgnored设置为true。验证并修复所有内容。

答案 1 :(得分:1)

EL仅在pageContext范围内可用时打印变量。这里的变量在页面范围内。如果变量在某个其他范围内,则必须在使用时指定范围。做这样的事情来打印'mystring'变量的值。

<%   
    myString = "stackoverflow";
    pageContext.setAttribute("myString",myString);
%>
${myString}

它将打印myString的值,如果myString为'null',它将打印空字符串(不会打印任何内容)。

假设如果将变量放在请求范围内,则必须使用“requestScope”

<%   
    myString = "stackoverflow";
    request.setAttribute("myString",myString);
%>
${requestScope.myString}

答案 2 :(得分:0)

为什么你要在jsp代码中检查String null?

如果您不想使用scriptlet,那么您可以在mentod本身检查字符串null,如果为null则返回空字符串。

myString = someMethodThatMayReturnNull(); //它永远不应该返回null。

方法来自其他代码,然后你可以用你的java代码包装它。