昨天我看到了一个关于Java Server Faces 2.0的演示文稿,虽然我现在是一个快乐的ASP.NET MVC/jQuery开发人员,但它看起来确实令人印象深刻.我最喜欢JSF的是大量支持AJAX的UI组件,这些组件似乎比ASP.NET MVC更快,特别是在AJAX重型站点上.集成测试看起来也很不错.
由于演示文稿只强调了JSF的优点,我也想听听另一方面的意见.
所以我的问题是:
我现在已经读了好几遍:一些开发人员并不主张在他们的XHTML文件中使用HTML标签交换JSF/Facelets标签.显然,HTML标签不会成为UI组件树的一部分,但它的缺点是什么?
我经常找到作者做这种混合的代码示例:
http://www.ibm.com/developerworks/java/library/j-facelets/
http://www.packtpub.com/article/facelets-components-in-jsf-1.2
http://oreilly.com/catalog/9780596529246
"Seam in Action"还交错了JSF/Facelets和HTML标签.
我对实际使用的内容感到困惑.我开始混合标签,但我开始相信它可能不是正确的选择.但是,我不明白为什么纯粹的方法是可取的.
我肯定知道我有一个表,其中JSF数据表没有给我足够的灵活性来显示我需要的东西,所以这样做是不可能的.
此外,我想知道为什么上面的例子都没有使用f:view等而不是硬编码的html,head,body等标签.
有人可以帮我清楚一下吗?
我有以下页面:
<h:form id="gameSelectionForm">
<h:selectOneMenu id="gameSelection">
<f:selectItems value="#{gameBean.gameIds}" />
</h:selectOneMenu>
<h:commandButton id="gameSelector" value="Play" action="#{gameBean.changeGame}" />
</h:form>
<h:panelGroup id="gameDiv">
<f:verbatim>
<iframe src="/levelup/resources/games/#{gameBean.gameId}/#{gameBean.htmlPage}" width="700px" height="800px" frameborder="0"/>
</f:verbatim>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
当我点击"gameSelector"按钮时,这里是事件序列:1.调用gameBean.getGameId和gameBean.getHtmlPage 2.调用gameBean.changeGame 3.刷新页面.
我的问题在于1.和2. changeGame修改了getGameId和getHtmlPage使用的gameBean变量.因此,我希望它首先执行,以便在刷新其他面板时,它们包含正确的数据.
请注意,此问题似乎只发生在gameDiv元素中的调用(其他变量已正确刷新).
您是否知道我可以做什么来恢复1.和2.的顺序,以便changeGame()方法是第一个被调用的?
我在Tomcat 7.0上使用JavaServer Faces 2.0.
提前致谢
当我现在在使用jsf时,我想知道为什么我们在jsf中使用逐字标记,它的意义是什么?
任何帮助将不胜感激。