对于标记库,不想再说些什么了。jsf可能最大的毛病都在q个标记库上面,首先定义的标记在jsp中,q不起到相应的输出功能,而只是用来增加相应得lg。在jsf中,最上层的组件ؓUIViewRootQ基本上所有的操作都是需要围l着此组件。而标记库的存在,只是Z化相应的操作。如下的标记Q?br>
<f:view>
<h:form>
<h:panelGrid>
.
</h:panelGrid>
</h:form>
</f:view>
其实对应的java代码Q如下:
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
HtmlForm form = new HtmlForm();
HtmlPanelGrid grid = new HtmlPanelGrid();
form.getChildren().add(grid);
root.getChildren().add(form);
也就是说没有标记库,我完全可以用java代码完成?br> 那么标记库的存在到底有没有意义,意义可能在于简化相应的操作Q想想html的属性是比较多的Q如果每个都要用java代码LӞ那么可能对于应用来说Q显得很不灵z,因ؓ改代码毕竟没有改jsp来的快。而且代码需要重新编译。所以jsf的标记库存在也是有点意义的?br>可是Q现在的问题是,׃jsf本n是规范Q其实现也就会各有不同,对于每种实现都会带有自己的那一套标记库Q随着标记库的增加Q对于用者来_也是不堪忍受的重负。所以,有些时候,如果需要动态做一些配|,那么q是丢弃标记库,用java代码来完成吧。当然faceletsQ提供了一U方式,用于很灵zȝ扩展多个标记库,可是Q看着那么多的标记QLq有些头疹{?br>
其次Q对于标记库来说Q各个标记库的不兼容也是一个很大的问题。就拿jstl和jsf来说Qjstl的变量声明,在jsf中肯定是没有办法解析的,同样jsf中的变量Q在jstl中也不能认识。我指的是页面声明的变量Q而不是session变量Q如下的例子Q?br>
<h:dataTable styleClass="table-background"
rowClasses="table-odd-row,table-even-row"
cellpadding="3"
value="#{recordBean.records}"
var="record"
binding="#{recordBean.recordData}">
<c:if test="${record}">
</c:if>
</h:dataTable>
在dataTable中声明了变量recordQ但是在jstl中是不会认识的?br> 可能q个问题Qfacelets已经解决了,主要facelets把所有的Elcontext中的变量都结合在了一P使用自n的FaceletsContext?br>不过Q如果我只是需要简单的功能Q还需要用faceletsQ那么也有点大材小用了。况且facelets也只是提供了cMtiles的功能?br>最后,惌的是Q虽然jsf目前的ide支持Q比其他框架多多了。可惜,人家都是建立在相应的标记库上的,如果你定义了自己标记库,人家不一定会认识。所以标记库的存在,对于jsf来说Q也许ƈ不一定是好事情,可能sun觉得如果把jsp抛弃了,有点可惜。所以在升jsf的同Ӟ也升U了相应得jsp规范?br> 个h觉得Q也许模版技术,可能也会是一U选择Q看看velocity和freemarkerQ觉得其比jsp有优势多了?br>

]]>