2017-04-06 108 views
-1

我正在學習Oracle教程,同時爲Java EE上課,我希望創建一個基於選定哪個單選按鈕來填充的下拉菜單。JSF根據單選按鈕選擇填充單個(不是多個)下拉框

爲了進一步澄清,因爲這被標記爲重複,而不是。我有一個單選按鈕和一個下拉菜單。我希望我的下拉菜單中填充來自我支持bean中四個數組之一的數據。如果單選按鈕的選擇發生變化,我希望下拉菜單中的數據根據​​無線電選擇中選擇的內容進行更改。

只是要清楚,這不是一項任務。

我有一些代碼片段是你在下面看到的。

此代碼使用我在我的bean中爲「makeHonda」所擁有的字符串數組呈現下拉列表。它會自動呈現它是否被選中。我希望它能根據點擊單選按鈕更新車型的下拉菜單。

我已經看過幾個不同的問題,並且還查找了Oracle教程,並且我只是沒有找到所需的東西。我所看到的大多數問題似乎都有自己的背景,與我正在嘗試做的不同。

這些都是在我的豆

private String[] carMake = {"Honda", "Nissan", "Suzuki", "Toyota"}; 
private String[] makeHonda = {"Civic", "NSX"}; 
private String[] makeNissan = {"Fairlady 420Z", "Sylvia S13"}; 
private String[] makeSuzuki = {"Cappuccino", "Jimny"}; 
private String[] makeToyota = {"Altezza RS200", "Crown"}; 
private String makeSelection; 
private String carModels; 

這東西是在XHTML文件

<label>Favorite Car Maker: </label> 
<h:selectOneRadio id="carMake" value="#{controller.makeSelection}" required="true" label="Action"> 
    <f:selectItems value="#{controller.carMake}"/> 
    <f:ajax render="carModels" /> 
</h:selectOneRadio> 

<!-- Car Models Drop Down Appears After Car Selection --> 
<label>Favorite Car Model: </label> 
<h:selectOneMenu id="carModels" value="#{controller.carModels}"> 
    <f:selectItems value="#{controller.makeHonda}" rendered="#{controller.makeSelection eq 'Honda'}"/> 
</h:selectOneMenu> 

回答

0

我已經解決了我的問題與另一職務,我將在末尾列出的幫助。

這些是我對我的bean所做的更改。

private String selectedMake; 
private String[] availableModels; 
private String[] carMakes = {"Honda", "Nissan", "Suzuki", "Toyota"}; 
private String[] makeHonda = {"Civic", "NSX"}; 
private String[] makeNissan = {"Fairlady 420Z", "Sylvia S13"}; 
private String[] makeSuzuki = {"Cappuccino", "Jimny"}; 
private String[] makeToyota = {"Altezza RS200", "Crown"}; 

public void changeModels(AjaxBehaviorEvent event) { 
    if ("Honda".equals(selectedMake)) { 
     availableModels = makeHonda; 
    } 
    if ("Nissan".equals(selectedMake)) { 
     availableModels = makeNissan; 
    } 
    if ("Suzuki".equals(selectedMake)) { 
     availableModels = makeSuzuki; 
    } 
    if ("Toyota".equals(selectedMake)) { 
     availableModels = makeToyota; 
    } 
} 

這是我對我的xhtml文件所做的更改。

<!-- Selection for Favorite Car Maker --> 
     <p></p> 
     <label>Favorite Car Maker: </label> 
     <h:selectOneRadio id="carMake" value="#{controller.selectedMake}" required="true" label="Action"> 
      <f:selectItems value="#{controller.carMakes}"/> 
      <f:ajax listener="#{controller.changeModels}" render="carModels" /> 
     </h:selectOneRadio> 

     <!-- Car Models Drop Down Appears After Car Selection --> 
     <label>Favorite Car Model: </label> 
     <h:selectOneMenu id="carModels" value="#{controller.selectedMake}"> 
      <f:selectItem value="#{null}" itemLabel="-- select --" /> 
      <f:selectItems value="#{controller.availableModels}" /> 
     </h:selectOneMenu> 

我之前被鏈接到的帖子是this

在那篇文章中,用戶詢問如何製作來自其他選擇菜單列表的多個selectonemenu列表。那裏的答案引導我去解決它,然而它和我實際做的有點不同。

+0

有什麼不同,它不是重複的(我認爲它是) – Kukeltje

+0

他從一個下拉列表中創建了一個下拉列表,然後是另一個下拉列表,然後是另一個下拉列表。多個下拉框,而不是單個下拉框,它基於單選按鈕改變其內部的數據。也即時通訊不完全確定他在用什麼'@EJB private SomeService someService;'但我的代碼不使用它。所以我的問題和我解決問題的方式是不同的。 – Morgan

+0

如果您擁有/使用一個或多個相關組件,則該概念不會有所不同。所以這部分並不真正起作用。 '@ EJB'可能會有所不同,但這不是最相關的部分,但它現在很有用......乾杯 – Kukeltje

相關問題