我不确定我是否可以这样做,但我正在尝试仅使用表达式语言打印字符串(无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的原因是因为我正在尝试对相当大的系统进行最小的更改。
答案 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代码包装它。