【发布时间】:2013-04-10 10:27:16
【问题描述】:
我正在尝试制作一个 Facelet,其中有两行,每行包含两个单选按钮。我想这样做,如果在第一行中选择了第一个单选按钮,则应该选择第二行中的第二个单选按钮,反之亦然。我正在尝试使用 JavaScript,但更改仍未反映在浏览器中。
这里是 Javascript:
<script type="text/javascript">
function radioSelect(val){
if(val.id == "encrypted:1")
{
document.getElementById("protected:0").value = "false";
document.getElementById("protected:1").value = "true";
}
else
{
document.getElementById("protected:0").value = "true";
document.getElementById("protected:1").value = "false";
}
}
</script>
这是我的 Facelet 文件中的一段代码:
<h:selectOneRadio id="encrypted"
value="#{uploadFileBean.encryption}" onclick="radioSelect(this);">
<f:selectItem itemLabel="Yes" itemValue="true"></f:selectItem>
<f:selectItem itemLabel="No" itemValue="false"></f:selectItem>
</h:selectOneRadio>
<h:selectOneRadio id="protected"
value="#{uploadFileBean.fileprotected}">
<f:selectItem itemLabel="Yes" itemValue="true"></f:selectItem>
<f:selectItem itemLabel="No" itemValue="false"></f:selectItem>
</h:selectOneRadio>
好吧,当我尝试编写这个 JavaScript 函数时,Ajax 更改不起作用。
<script type="text/javascript">
function radioSelect(val){
if(val.id == "encrypted:1")
{
document.getElementById("protected:0").value = "false";
document.getElementById("protected:1").value = "true";
}
if(val.id == "protected:1")
{
document.getElementById("encrypted:0").value = "false";
document.getElementById("encrypted:1").value = "true";
}
if(val.id == "encrypted:0")
{
document.getElementById("protected:0").value = "false";
document.getElementById("protected:1").value = "true";
}
if(val.id == "protected:0")
{
document.getElementById("encrypted:0").value = "true";
document.getElementById("encrypted:1").value = "false";
}
}
</script>
【问题讨论】:
-
你确定不应该是
document.getElementById("protected"),因为我没有看到:0吗?并且设置值不会检查单选按钮! -
我认为您需要根据执行操作的单选按钮重新渲染组件。
-
是的,我尝试过“protected”,但是在 Chrome 上调试时我找不到 value 属性,所以我使用了 protected:0 来更改它的值,但它没有这样做。
-
@dShringi - 我不明白你的意思是重新渲染组件?
-
当你改变了组件的值,你需要使用
<f:ajax render="otherRadioGroup">重新渲染它。
标签: javascript jsf facelets selectoneradio