我想知道Expression Languages(EL)之间的细节差异.有JSP EL,JSF EL和Unified EL.
我想知道EL背后的历史以及Java EE应用程序中使用的最新EL.它是最新版本中所有视图技术的EL通用吗?
我是JSF 2的新手.我的问题是关于BalusC对这个问题的回答jsf2 ajax基于请求参数更新部件 我尝试了kickstart代码BalusC发布并且我遇到了EL解析错误:
/nameofpage.xhtml @12,64 rendered="#{bean.panels.contains('u1')}"
Error Parsing: #{bean.panels.contains('u1')}
Run Code Online (Sandbox Code Playgroud)
我想这是因为我没有运行一个支持Servlet 3.0/EL 2.2的容器,并且根据Servlet 3.0规范声明了/WEB-INF/web.xml.我正在使用Tomcat 6.
BalusC在他的回答中建议创建一个自定义EL功能.但是如何使用自定义EL功能完成此操作?或者只需配置我项目的某些部分即可解决这个问题?
以下是我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud) 我想获得HashMap基于密钥的价值.
HashMap<String, ArrayList<String>> map
= new HashMap<String, ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();
map.put("key", arrayList);
request.setAttribute("key", map);
Run Code Online (Sandbox Code Playgroud)
我做的是
<c:forEach var="map" items="${requestScope.key}">
<c:forEach var="hash" items="${map.value}">
<option><c:out value="${hash}"/></option>
</c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但似乎它正在打印所有内容,我想要做的是获取价值取决于关键像:hash.key或者其他什么
更新:
我做了类似的事情,但它仍然无法正常工作
<c:forEach var="map" items="${requestScope.key}">
<c:forEach var="hash" items="${map['key']}">
<option><c:out value="${hash}"/></option>
</c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
和StackTrace:Property 'External' not found on type java.util.HashMap$Entry
我很确定真的有这样的关键.
我尝试了以下令人惊讶的不起作用,看起来像.values在jstl中根本不起作用:
<c:forEach var="r" items="${applicationScope['theMap'].values}">
Run Code Online (Sandbox Code Playgroud)
映射定义如下(以后保存到ServletContext):
Map<Integer, CustomObject> theMap = new LinkedHashMap<Integer, CustomObject>();
Run Code Online (Sandbox Code Playgroud)
如何使这个工作?我实际上真的想避免修改foreach循环中的内容.
使用forEach循环,我想创建表格单元格(用于行),而每个单元格包含表单的输入字段.表格单元格的数量始终是固定的(12).那实际上没问题.但是,接下来是挑战:forEach还应该在输入字段中输入可变数量的默认值,这些输入字段必须从Map(Long,Double)获得.
这是我的(简化)尝试:
<c:forEach var="number" begin="1" end="12" >
<td>
<input type="text" value="${requestScope.aMapWithData[number]}" />
</td>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但这并未显示输入字段中Map的任何值.我想问题是"数字"是String类型而不是Long.所以我想知道如果不使用scriptlet就可以解决这个问题.
我正在寻找EL 2.1和2.2之间的差异列表.
我知道EL 2.1和2.2之间的一个区别是能够在2.2中传递方法参数.还有其他差异吗?
是否有可用于差异的功能比较图表?我一直在寻找几天,到目前为止还没能找到它.
谢谢