2017-04-19 88 views
0

我的目標是使用ajax來基於單選按鈕的值來激活/禁用菜單。 我的問題是,具有id =「selectCategoryType」的單選按鈕不會更新Bean(catWordGuiBean.addCategoryType)中的值 - 因爲我沒有複雜的對象,但是我不需要自定義轉換器。Primefaces&Radiobutton不更新Bean值

這裏是我的代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:c="http://java.sun.com/jsp/jstl/core" 
xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
xmlns:p="http://primefaces.org/ui" 
> 
<h:head> 
    <link rel="shortcut icon" 
     href="http://localhost:8080/DeviceCommander/resources/images/favicon.ico" /> 
    <title> 
     <h:outputText value=" Pronounciator "/> 
    </title> 
</h:head> 
<h:body> 
    <p:layout fullPage="true"> 

     <p:layoutUnit id="up" position="north" header="" resizable="true" closable="false" collapsible="true"> 
      <h:form id="header"> 
       <p:panelGrid columns="6" layout="grid" cellspacing="20" styleClass="ui-noborder"> 
        <h:graphicImage value="resources/images/pronuncia.jpg" height="70" width="120" /> 
        <h:outputText value=" #{display.date}: " /> 
        <h:outputText id="now" value="#{timeBean.now}" /> 
        <p:poll interval="1" listener="#{timeBean.updateDate}" update="now" /> 
        <h:outputText value=" #{display.theme}: " /> 
        <p:themeSwitcher effectSpeed="normal" effect="fade" style="width:165px" id="defaultSwitcher" value="#{themeSwitcherBean.theme}"> 
         <f:selectItem itemLabel=" #{display.select} #{display.theme} " itemValue="" /> 
         <f:selectItems value=" #{themeSwitcherBean.themes} " /> 
         <p:ajax global="false" listener="#{themeSwitcherBean.saveTheme}" /> 
        </p:themeSwitcher> 
       </p:panelGrid> 
      </h:form> 
     </p:layoutUnit> 
     <p:layoutUnit position="center"> 
      <p:panelGrid styleClass="ui-noborder"> 
       <p:row> 
        <p:column colspan="1"> 
         <p:panelGrid> 
          <h:form id="db"> 
           <p:row> 
            <p:column colspan="4"> 
             <h3> 
              <h:outputText value=" ADD: " /> 
             </h3> 
            </p:column>    
           </p:row> 
           <p:row> 
            <p:column> 
             <h:outputText for="selectCategoryType" value=" Category: " /> 
            </p:column> 
            <p:column colspan="3"> 
             <p:selectOneRadio id="selectCategoryType" value="#{catWordGuiBean.addCategoryType}" > 
              <p:ajax event="click" update="addOldCategory" listener="#{catWordGuiBean.handleCategorySelection}" /> 
              <f:selectItems value="#{catWordGuiBean.addCategoryTypes}" var="addCategoryType" itemLabel="#{addCategoryType}" itemValue="#{addCategoryType}"/> 
             </p:selectOneRadio> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <h:outputText value=" Old Category: " /> 
            </p:column> 
            <p:column colspan="3"> 
             <p:selectOneMenu id="addOldCategory" value="" disabled="#{catWordGuiBean.disabledOldCategoryGui}"> 
              <f:selectItem itemLabel="Select One" itemValue="" /> 
              <f:selectItem itemLabel="AH" itemValue="AH" /> 
              <f:selectItem itemLabel="UH" itemValue="UH" /> 
             </p:selectOneMenu> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <h:outputText value=" New Category: " /> 
            </p:column> 
            <p:column> 
             <p:inputTextarea id="addNewCategoryName" rows="1" cols="4" maxlength="4" autoResize="false" value="#{catWordGuiBean.newCategoryName}" disabled="#{catWordGuiBean.disabledNewCategoryGui}"/> 
            </p:column> 
            <p:column> 
             <h:outputText value=" IPA: "/> 
            </p:column> 
            <p:column> 
             <p:inputTextarea id="addNewIpa" rows="1" cols="3" maxlength="3" autoResize="false" value="#{catWordGuiBean.newIpa}" disabled="#{catWordGuiBean.disabledNewCategoryGui}"/> 
            </p:column> 
           </p:row> 
           <p:row>         
            <p:column> 
             <h:outputText value=" Word: "/> 
            </p:column> 
            <p:column colspan="3"> 
             <p:inputText id="addNewWord"/> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <h:outputText value=" Submit: "/> 
            </p:column> 
            <p:column colspan="3"> 
             <p:commandButton id="addCategoryAndWord" value="Add" /> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column colspan="4"> 
             <h3> 
              <h:outputText value=" DELETE: "/> 
             </h3> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <h:outputText value=" Category: "/> 
            </p:column> 
            <p:column colspan="2"> 
             <p:selectOneMenu id="deleteOldCategory" value="" > 
              <f:selectItem itemLabel="Select One" itemValue="" /> 
              <f:selectItem itemLabel="AH" itemValue="AH" /> 
              <f:selectItem itemLabel="UH" itemValue="UH" /> 
             </p:selectOneMenu> 
            </p:column> 
            <p:column> 
             <p:commandButton id="deleteCategory" value="Delete" /> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <h:outputText value=" Word: "/> 
            </p:column> 
            <p:column colspan="2"> 
             <p:selectOneMenu id="deleteOldWord" value="" > 
              <f:selectItem itemLabel="Select One" itemValue="" /> 
              <f:selectItem itemLabel="AH" itemValue="AH" /> 
              <f:selectItem itemLabel="UH" itemValue="UH" /> 
             </p:selectOneMenu> 
            </p:column> 
            <p:column> 
             <p:commandButton id="deleteWord" value="Delete" /> 
            </p:column> 
           </p:row> 
          </h:form> 
         </p:panelGrid> 
        </p:column> 
        <p:column colspan="4"> 
         <p:panelGrid> 
          <h:form id="randomizer"> 
           <p:row> 
            <p:column>          
             <h3> 
              <h:outputText value=" Select Categories: "/> 
             </h3> 
            </p:column> 
            <p:column colspan="2"> 
             <p:selectOneMenu id="selectWordCategories" value="" > 
              <f:selectItem itemLabel="Select" itemValue="" /> 
              <f:selectItem itemLabel="AH" itemValue="Xbox One" /> 
              <f:selectItem itemLabel="UH" itemValue="PS4" /> 
             </p:selectOneMenu> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <p:commandButton id="wordGenerator" value="Generate Word" /> 
            </p:column> 
            <p:column> 
             <p:commandButton id="categoryFinder" value="Show Word Category" /> 
            </p:column> 
            <p:column> 
             <h3> 
              <h:outputText value=" Show Category in: "/> 
             </h3> 
             <p:knob value="{wordRandomizerBean.seconds}"> 
              <p:ajax listener="#{wordRandomizerBean.knobChange}"/> 
             </p:knob> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <h1> 
              <h:outputText value=" Word: "/> 
             </h1> 
            </p:column> 
            <p:column colspan="2"> 
             <h1> 
              <h:outputText value=" #{wordRandomizerBean.randomWord} "/> 
             </h1> 
            </p:column> 
           </p:row> 
           <p:row> 
            <p:column> 
             <h1> 
              <h:outputText value=" Category: "/> 
             </h1> 
            </p:column> 
            <p:column> 
             <h1> 
              <h:outputText value=" IPA: "/> 
             </h1> 
            </p:column> 
            <p:column> 
             <h1> 
              <h:outputText value=" Category: "/> 
             </h1> 
            </p:column> 
           </p:row> 
          </h:form> 
         </p:panelGrid>        
        </p:column> 
       </p:row> 
      </p:panelGrid>  
     </p:layoutUnit> 
    </p:layout> 
</h:body> 

和bean:

package com.linknet.beans; 

import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

import javax.faces.event.AjaxBehaviorEvent; 

@ManagedBean(name = "catWordGuiBean") 
@ViewScoped 
public class CategoryWordManagementBean { 
    public CategoryWordManagementBean() { 
     this.disabledNewCategoryGui = true; 
     this.disabledOldCategoryGui = true; 
     this.addCategoryType = ""; 
    } 
    @PostConstruct 
    public void init() { 
     addCategoryTypes = new ArrayList<String>(); 
     addCategoryTypes.add("New"); 
     addCategoryTypes.add("Old"); 
    } 


    public void enableNewCategory() { 
     this.disabledNewCategoryGui = false; 
    } 
    public void disableNewCategory() { 
     this.disabledNewCategoryGui = true; 
    } 
    public void enableOldCategory() { 
     this.disabledOldCategoryGui = false; 
    } 
    public void disableOldCategory() { 
     this.disabledOldCategoryGui = true; 
    } 
    public void handleCategorySelection(AjaxBehaviorEvent e) { 
     System.out.println("Test 1"); 
     System.out.println(addCategoryType); 
    } 


    public boolean isDisabledNewCategoryGui() { 
     return this.disabledNewCategoryGui; 
    } 
    public void setDisabledNewCategoryGui(boolean disabledNewCategoryGui) { 
     this.disabledNewCategoryGui = disabledNewCategoryGui; 
    } 
    public boolean isDisabledOldCategoryGui() { 
     return disabledOldCategoryGui; 
    } 
    public void setDisabledOldCategoryGui(boolean disabledOldCategoryGui) { 
     this.disabledOldCategoryGui = disabledOldCategoryGui; 
    } 
    public String getAddCategoryType() { 
     return addCategoryType; 
    } 
    public void setAddCategoryType(String addCategoryType) { 
     this.addCategoryType = addCategoryType; 
    } 

    public String getNewCategoryName() { 
     return newCategoryName; 
    } 
    public void setNewCategoryName(String newCategoryName) { 
     this.newCategoryName = newCategoryName; 
    } 
    public String getNewIpa() { 
     return newIpa; 
    } 
    public void setNewIpa(String newIpa) { 
     this.newIpa = newIpa; 
    } 
    private boolean disabledNewCategoryGui; 
    private boolean disabledOldCategoryGui; 

    private List<String> addCategoryTypes; 
    public List<String> getAddCategoryTypes() { 
     return addCategoryTypes; 
    } 
    public void setAddCategoryTypes(List<String> addCategoryTypes) { 
     this.addCategoryTypes = addCategoryTypes; 
    } 
    private String addCategoryType; 
    private String newCategoryName; 
    private String newIpa; 
} 

哪裏是我的錯?

我感謝任何幫助,在此先感謝。

+1

請編輯您用[最小,完整,可驗證的示例]質疑(HTTPS:/ /stackoverflow.com/help/mcve) –

回答

1

改變你從clickchange AJAX事件,這樣的listener得到catWordGuiBean.addCategoryType值後,再執行更新

<p:ajax event="change" update="addOldCategory" listener="#{catWordGuiBean.handleCategorySelection}" />