如何在不使用ajax的情况下在jsf中的数据表中进行列级渲染?
例如,第一列具有下拉菜单选项。根据选择,我需要在第二列中启用按钮。
任何人都可以帮助我。
答案 0 :(得分:2)
如果通过“列级渲染”表示“在表格中重新呈现单个列的方法”,则答案是 - 您不能。浏览器不允许这样做。你需要分别在一个colimn中重新渲染每个td。
如果您只是想“动态更改表格的某些部分”,那么:
如果用“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标记)或切换技术。混合技术使它们指数级变得更难,混合你并不擅长的东西(因为你不得不提出问题 - 你当然不是)会适得其反。