如何在不使用ajax的情况下在jsf中进行数据表的列级渲染?
例如,第一列有一个下拉菜单选择。根据选择,我需要在第二列中启用按钮。
有谁能帮我一下吗?-
如果通过"列级渲染"你的意思是"一种在表中渲染单列的方式",那么答案是-你不能。浏览器不允许这样做。您需要在一列中分别呈现每个td。
-
如果你的意思是"动态更改表格的某些部分",那么:
-
如果"ajax"是指"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标记),或者切换技术。混合技术会使它们成倍地变得困难,而混合你并不擅长的东西(既然你不得不问这个问题——你肯定不擅长)会适得其反。