2013-04-10 115 views
0

我正在試圖製作一個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> 
+0

你確定不應該是'document.getElementById(「protected」)',因爲我在那裏沒有看到':0'嗎?並設置值並不檢查單選按鈕! – adeneo 2013-04-10 10:34:43

+0

我認爲你需要重新渲染組件,這取決於哪個單選按鈕執行了操作。 – dShringi 2013-04-10 10:35:49

+0

是的,我試過「保護」,但在Chrome上調試時我找不到值屬性,所以我使用了保護:0以便更改它的值,但它沒有這樣做。 – Tushar 2013-04-10 10:36:26

回答

1

在你使用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> 
+0

感謝它現在正在工作 – Tushar 2013-04-10 11:04:21

+0

不客氣。 – dShringi 2013-04-10 11:05:40

+0

請用單詞解釋問題和解決方案,而不是使其成爲本地化搜索和查找遊戲。 – BalusC 2013-04-10 12:25:17

相關問題