<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 170  文章 - 536  trackbacks - 0
    <2005年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    我參與的團隊

    隨筆分類(103)

    搜索

    •  

    積分與排名

    • 積分 - 414037
    • 排名 - 135

    最新評論

    閱讀排行榜

             最近一直在用JSF,遇到了一些很奇怪的事情,昨天花了點時間仔細分析了一下,找到了一個主要問題,就是JSFJSTL之間的互操作存在著兼容性問題。(JSTL使用的是Apache的基于1.1 Spec的實現,JSFmyfaces 1.1.1,實現了JSF 1.1 Spec)

             一、<h:dataTable>中列表顯示一個List中的內容,每行有幾個操作的按鈕,因為有一個功能是一個開關,當它的狀態是Start的時候,顯示的按鈕是Stop,當它是Stop的時候,顯示Start按鈕。

             起初的實現方法是:在dataTable中的<h:column>使用<c:if>判斷當前狀態,并決定顯示哪個按鈕。

             代碼如下:

             <c:if test=”${item.status} == ‘IP’}”>

                       <h:graphicImage…..>

             </c:if>

             運行結果:任何情況下都會顯示出這個按鈕。

             接著,做了如下的測試。

             <h:outputText value=“#{item.status}”/>     輸出正確的值。

             <c:out value=”${item.status}”/>                  沒有輸出。

             二、系統需要通過一個<h:dataTable>顯示一個List中的內容,當這個List中沒有數據時,則不顯示該dataTable。

             起初的寫法是這樣的:

             <c:if test=”${not empty myList}” var=”listTest”>

                       <h:dataTable….>

             </c:if>

             這樣在沒有數據的時候不會顯示出表格,有數據的時候可以正常顯示出表格。看上去似乎正常,但是在處理以下需求的時候又出現了奇怪的問題,頁面中有個固定的表格1,顯示一些固定的數據,同一頁面中有一個菜單,點擊不同的菜單項的時候,會加載項目對應的數據并生成表格2。

    當點擊某一菜單后沒有對應的數據,這時表格2為空,這時再點有對應數據的菜單,這時候,數據正常加載,表格2正常顯示,但奇怪的是,表格1卻出現的奇怪的現象,里面的操作按鈕全部都不顯示了,再點擊一次,又恢復正常了。

    查找了一些相關的資料,找到了一些更詳細的解釋。

    JSF Spec (Section 9.2.8) 中有如下定義:

    n          JSF component custom actions nested inside a custom action that conditionally renders its body (such as JSTL’s <c:if> or <c:choose>) must contain a manually assigned id attribute.

    n          JSF component custom actions may not be nested inside a custom action that iterates over its body (such as JSTL’s <c:forEach>). Instead, you should use a Renderer that performs its own iteration (such as the Table renderer used by <h:dataTable>).

    dataTable中的每一行是由dataTable自己迭代產生的,這些數據并不能被JSTL或者其他的非JSF Tag使用,同樣,使用<c:forEach>這樣的非JSF Tag迭代產生的數據也不能夠被JSF使用。

    那么怎樣解決上面的問題呢?

    JSF Core Library中大部分Tag都有rendered這樣的屬性,這個屬性用來控制該組件是否輸出,我們只要把原先寫在<c:if>中的判斷表達式放到這里面就可以達到和<c:if>控制輸出一樣的效果了。

    <h:dataTable id="myTable" value="#{backingBean.myList}" var="item"

    rendered="#{not empty backingBean.myList}">

    ……

             </h:dataTable>

             同樣的,這樣也可以解決前面那個按鈕顯示的問題。

             有消息說,在新的JSF 1.2 SpecJSP 2.1 Spec中將會努力解決這樣的問題,讓我們拭目以待吧。

    posted on 2005-12-15 15:35 steady 閱讀(4063) 評論(0)  編輯  收藏 所屬分類: JSF & Myfaces
    主站蜘蛛池模板: 亚洲大码熟女在线观看| 亚洲精品高清久久| 亚洲国产精品自在自线观看| 亚洲精品视频免费在线观看| 亚洲视频免费在线观看| 四虎国产成人永久精品免费| 亚洲午夜视频在线观看| 99免费在线观看视频| 亚洲白色白色在线播放| 日韩精品免费一区二区三区| 亚洲sss综合天堂久久久| 久久不见久久见免费影院| 亚洲欧美日韩中文字幕一区二区三区| 成人免费一区二区三区在线观看| 亚洲一区二区观看播放| 亚洲Aⅴ无码一区二区二三区软件| 亚洲裸男gv网站| 中文字幕在线视频免费| 成人A级毛片免费观看AV网站| 亚洲性线免费观看视频成熟| 免费无码不卡视频在线观看| 免费视频成人国产精品网站| 国产精品亚洲成在人线| 亚洲国产精品免费观看| 亚洲Av永久无码精品黑人| 久久久久亚洲AV综合波多野结衣| 免费国产99久久久香蕉| 亚洲欧洲日本天天堂在线观看| 中文字幕在线观看免费| 亚洲欧洲日产国码www| 免费毛片在线视频| 久久最新免费视频| 亚洲特级aaaaaa毛片| 国产国产成年年人免费看片| 久久九九久精品国产免费直播| 在线电影你懂的亚洲| 香蕉免费一区二区三区| 一本色道久久综合亚洲精品蜜桃冫 | 99无码人妻一区二区三区免费| 亚洲av成本人无码网站| 亚洲VA中文字幕无码一二三区 |