如何String
使用c
标签验证a 是空还是空JSTL
?
我有一个名称变量,var1
我可以显示它,但我想添加一个比较器来验证它.
<c:out value="${var1}" />
Run Code Online (Sandbox Code Playgroud)
我想验证它是null还是空(我的值是字符串).
假设我像这样指定一个outputText组件:
<h:outputText value="#{ManagedBean.someProperty}"/>
Run Code Online (Sandbox Code Playgroud)
如果我在someProperty
调用getter for时打印一条日志消息并加载页面,那么注意每个请求多次调用getter是很容易的(在我的情况下发生了两次或三次):
DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
Run Code Online (Sandbox Code Playgroud)
如果someProperty
计算的值很昂贵,这可能是一个问题.
我用Google搜索了一下,认为这是一个已知问题.一个解决方法是包括一个检查,看看它是否已经计算过:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Run Code Online (Sandbox Code Playgroud)
这个问题的主要问题是你得到大量的样板代码,更不用说你可能不需要的私有变量了.
这种方法有哪些替代方案?没有那么多不必要的代码,有没有办法实现这一目标?有没有办法阻止JSF以这种方式行事?
感谢您的输入!
我想知道Expression Languages(EL)之间的细节差异.有JSP EL,JSF EL和Unified EL.
我想知道EL背后的历史以及Java EE应用程序中使用的最新EL.它是最新版本中所有视图技术的EL通用吗?
当尝试在EL中引用托管bean时#{bean.entity.property}
,有时会javax.el.PropertyNotFoundException: Target Unreachable
抛出异常,通常是在设置bean属性时,或者要调用bean操作时.
似乎有五种不同的消息:
这些都意味着什么?它们是如何引起的,它们应该如何解决?
如何获得ArrayList
使用JSF EL表达式的长度?
#{MyBean.somelist.length}
Run Code Online (Sandbox Code Playgroud)
不起作用.
如何在JSP页面上引用EL常量?
我有一个Addresses
名为常量的接口URL
.我知道我可以通过以下方式用scriplet引用它:<%=Addresses.URL%>
,但是我如何使用EL来做到这一点?
我想使用来自JSTL forEach循环的计数,但我的代码似乎不起作用.
<c:forEach items="${loopableObject}" var="theObject" varStatus="theCount">
<div id="divIDNo${theCount}">
</div>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
产生
<div id="divIDNojavax.servlet.jsp.jstl.core.LoopTagSupport$1Status@5570e2" >
Run Code Online (Sandbox Code Playgroud) 如何在一个中检查两个条件<c:if>
?我试过这个,但它引发了一个错误:
<c:if test="${ISAJAX == 0} && ${ISDATE == 0}">
Run Code Online (Sandbox Code Playgroud) 它是否正确?
<c:if test="${theBooleanVariable == false}">It's false!</c:if>
Run Code Online (Sandbox Code Playgroud)
或者我可以这样做吗?
<c:if test="${!theBooleanVariable}">It's false!</c:if>
Run Code Online (Sandbox Code Playgroud) 我有一个由Integer键入的Map.使用EL,我如何通过其键访问值?
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");
Run Code Online (Sandbox Code Playgroud)
我认为这会有效,但它没有(地图已经在请求的属性中):
<c:out value="${map[1]}"/>
Run Code Online (Sandbox Code Playgroud)
跟进:我追查了问题.显然${name[1]}
,使用数字进行地图查找Long
.我想通了这一点,当我换HashMap
到TreeMap
和收到的错误:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Run Code Online (Sandbox Code Playgroud)
如果我将地图更改为:
Map<Long, String> map = new HashMap<Long, String>();
map.put(1L, "One");
Run Code Online (Sandbox Code Playgroud)
然后${name[1]}
返回"一".那是什么?为什么<c:out>
将数字视为一个长数.对我来说似乎违反直觉(因为int比长期更常用).
所以我的新问题是,是否有EL符号通过Integer
值访问地图?