下午勤勤恳恳的折腾了几个小时,终于跑通了第一个jsf。
原因居然是jboss5.1.0GA的默认的编译java版本是1.5,而我的jdk版本是1.7.
我注意到jsf的中的el表达式和jsp中的el表达式有所不同,就查了查资料总结一下JSF中的EL表达式。
首先是jsf中el表达式和jsp中el表达式的不同:
1.JSF用 #{} JSP使用${}
2.JSF中EL表达式可以更新托管bean,JSP只能访问输出。
3.JSF的内置对象和JSP不一样。
4.jsf el表达式不支持JSP el的内嵌函数。
既然内置对象不同,我们看看有哪些不同:
JSP就不列举了9个内置,和几个隐式对象。
JSF中的有11个内置对象。
applicationScope,cookie,facesContext,header,headerValues,initParam,param,paramValues,
requestScope,sessionScope,view。
其他的不多说,和jsp不同的只有facesContext和view,
facesContext中包含所有相关信息每请求状态的处理一个JavaServer Faces请求及呈现相应的响应。一般不用它。
view可以用于获得当前视图的ID(viewId),获取当前视图所用绘制器的ID(renderKitId)以及获得访问当前视图的用户所使用的语言、国家选项。
JSF EL中的常用示例
#{xx.xxx}:访问或更新xx的xxx属性,如果xx是一个map对象那么xxx被认为是key,访问对应的value。
#{xx['xxx']}:跟上面一样。
#{xx[xxx]}:先对xxx求值,然后同上。
#{xx[#{xxx}]}:同上。
#{list[3]}:这个就不用解释了吧。
#{map['xx'].xxx}:访问或更新map中key为'xx'的对象的xxx属性。
#{user.name='xxx'?'true':'false'}:三目运算返回true或false。