我有一个由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
值访问地图?
在JSF中,可以使用EL空运算符渲染或不渲染组件
rendered="#{not empty myBean.myList}"
Run Code Online (Sandbox Code Playgroud)
正如我所理解的那样,运算符既可以作为空值检查,也可以检查列表是否为空.
我想对我自己的自定义类的某些对象进行空检查,我需要实现哪些接口或部分接口?哪个接口是空的运算符兼容?
我在Facelets中弄清楚如何处理EL表达式时遇到了一些麻烦.基本上我有:
<h:outputText id="Prompt"
value="Fobar"
rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />
Run Code Online (Sandbox Code Playgroud)
但我一直在:
错误跟踪[第69行]实体名称必须紧跟实体引用中的"&".
如何在EL中连接字符串?
我想做这样的事情,但它不起作用:
${var1 == 0 ? 'hi' : 'hello ' + var2}
Run Code Online (Sandbox Code Playgroud)
它抛出异常试图转换'hello'
为Double
我在JSF2中编程,netbeans创建了许多#{}
包含表达式的页面.
但有时在网上我发现${}
同样的事情!
有什么不同吗?这些是什么?
Google会忽略这些字符#{}
,${}
因此难以搜索.
我有一个数据表,每行有一个按钮:
<ice:dataTable ... var="item">
<ice:column>
<h:commandButton value="Download" action="#{mybean.downloadItem(item)}" />
</ice:column>
</ice:dataTable>
Run Code Online (Sandbox Code Playgroud)
在支持bean中有这种方法:
public void downloadItem(Item item) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
一切正常(单击该方法时执行),但Eclipse验证失败并显示以下奇怪消息:
方法必须具有签名"String method(),String method(),String方法(String),String方法(String,String),String方法(String,String,String),String方法(String,String,String,String) ,String方法(String,String,String,String,String),String方法(String,String,String,String,String,String),String方法(String,String,String,String,String,String,String),String method(String,String,String,String,String,String,String,String),String方法(String,String,String,String,String,String,String,String,String),String方法(String,String,String, String,String,String,String,String,String,String),String方法(String,String,String,String,String,String,String,String,String,String,String),String方法(String,String,String, String,String,String,String,String,String,String,String,String),String method(String,String,String,String,String,String,String,String,String,String,String,String,String),String方法 tring,String,String,String,String,String,String,String,String,String,String,String,String,String),String method(String,String,String,String,String,String,String,String,String, String,String,String,String,String,String),String方法(String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String),String method(String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String),String method(String,String,String,String,String, String,String,String,String,String,String,String,String,String,String,String,String,String),String method(String,String,String,String,String,String,String,String,String,String, String,String,String,String,String,String,String,String,String)"但是有签名"void method()"
我能做什么?
如果这是相关的,我在Tomcat 7上使用Eclipse Indigo SR1.
如果#{myBean.birthdate}
是的java.util.Calendar
或java.util.Date
类型,可以予可能使用现有的函数也许,随着像由所产生的一个输出格式化此的EL本身内部DateFormat
的SHORT
,MEDIUM
,LONG
ABD FULL
输出类型?
相反,输出的完整形式#{myBean.birthdate}
:周三1月19日19时01分42秒WIT 2011,我只是喜欢简单输出2011年1月19日.
我应该用#{formatBean.format(myBean.birthdate)}
吗?
目前我使用:
<%
final String message = (String) request.getAttribute ("Error_Message");
%>
Run Code Online (Sandbox Code Playgroud)
然后
<%= message %>
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否可以用EL或JSTL完成相同的操作而不是使用scriptlet.
我想在EL(表达式语言)中连接三元运算符中的字符串.
假设有一个名为value的变量.如果它是空的,我想使用一些默认文本.否则,我需要附加一些静态文本.
${(empty value)? "none" : value + " enabled"}
Run Code Online (Sandbox Code Playgroud)
但是这不会编译.写这个的正确方法是什么?或者这甚至可能吗?
是否可以在EL表达式中定义变量并重新使用该变量?
例如 :
<h:inputText
value="#{myBean.data.something.very.long}"
rendered="#{myBean.data.something.very.long.showing}"
/>
Run Code Online (Sandbox Code Playgroud)
我的想法是这样的:
<!--
somehow define a variable here like :
myVar = #{myBean.data.something.very.long}
-->
<h:inputText
value="#{myVar}"
rendered="#{myVar.showing}"
/>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?谢谢 !