从一个内部选择另一个
问题描述:
我正在试图制作一个Facelet,其中有两行,每行都包含两个单选按钮。我想这样做,如果第一行中选择第一个单选按钮,第二行中的第二个单选按钮应该被选中,反之亦然。我正在尝试使用JavaScript,但仍然没有在浏览器中反映这些更改。从一个内部选择另一个<h:selectOneRadio><h:selectOneRadio>
这里是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函数阿贾克斯更改不起作用。
<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>
答
在你使用JavaScript是完美的工作也是当你改变它得到改变的价值,但是,以反映你需要更新其持有的你的价值成分的facelet这些变化已经改变。
f:ajax
标签将在这里做必要的事情,因为它会更新在render
属性中提供了id的facelet上的所有组件。因此,下面的代码将在每次执行任何h:selectOneRadio
的任何操作时更新其他组件。
<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>
<f:ajax render="protected">
</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>
<f:ajax render="encrypted">
</h:selectOneRadio>
你确定不应该是'document.getElementById(“protected”)',因为我在那里没有看到':0'吗?并设置值并不检查单选按钮! – adeneo 2013-04-10 10:34:43
我认为你需要重新渲染组件,这取决于哪个单选按钮执行了操作。 – dShringi 2013-04-10 10:35:49
是的,我试过“保护”,但在Chrome上调试时我找不到值属性,所以我使用了保护:0以便更改它的值,但它没有这样做。 – Tushar 2013-04-10 10:36:26