2011-07-15 19 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