2011-07-15 30 views
0

如何在不使用ajax的情況下在jsf中的數據表中進行列級別渲染?如何在jsf中的數據表中進行列級渲染?

例如,第一列有一個下拉菜單選擇。基於選擇,我需要在第二列中啓用按鈕。

任何人都可以幫助我做到這一點。

+0

到目前爲止您嘗試過了什麼,您使用的是JSF 2.0嗎?這聽起來像是你想要使用Ajax的完美例子。 – Mark

回答

2
  1. 如果「列級渲染」你的意思是「一種方式,表重新呈現一列」,那麼答案是 - 你不能。瀏覽器不允許這樣做。您需要分別在colimn中重新提交每個td。

  2. 如果你僅僅意味着「動態更改表的某些部分」,則:

    • 如果「AJAX」你的意思是「JavaScript的」,那麼 - 你不能。你需要一些JavaScript來做到這一點。

    • 如果用「ajax」表示「連接到服務器」,那麼你可以編寫自己的Javascript來完成客戶端的工作。

訣竅是 - 一旦你開始使用JavaScript來啓用和禁用按鈕,你必須一直走下去:不僅在選擇一個選項下拉列表改變時,也當表第一次呈現。如果你不這樣做,你將不得不碰撞演示邏輯,在Java中,一個在Javascript中。

可能被應用到JSF輸出將是工作的Javascript解決方案的例子:

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script> 
<table id='mytable'> 
    <tr> 
     <td><select> 
       <option>A</option><option>B</option> 

     </select></td> 
     <td><input type='button' value='test'></td> 
    </tr> 
    <tr> 
     <td><select> 
       <option>A</option><option>B</option> 

     </select></td> 
     <td><input type='button' value='test'></td> 
    </tr> 
</table> 
<script> 
    function fix_table(){ 
     $('#mytable select').each(function(){ 
      $('input', this.parentNode.parentNode).attr('disabled',this.value=='B') 
     }) 
    } 

    fix_table(); 
    $('#mytable select').change(function(){fix_table()}) 
</script> 

當您選擇從下拉「B」,相關的按鈕被禁用。

在我看來,這是一個非常糟糕的解決方案。

您應該使用JSF及其提供的工具(如ajax標記)或切換技術。混合技術使得它們成倍增加,混合你不擅長的東西(因爲你不得不提出這個問題 - 你當然不會)會適得其反。

+0

感謝您的及時回覆。我正在使用jsf 1.2。我的意思是,如果我從數據表的第一列中選​​擇下拉列表,我需要在第二列中添加一個文本框。 – Suresh

+0

最後,我成功完成了這個渲染.. :) :) – Suresh

+0

@Suresh:很高興聽到它。是的,1.2自定義JavaScript實際上是唯一的選擇。 – fdreger