# Probleme mit h:selectOneRadio



## bluer (5. Aug 2011)

Hi Leute,

ich habe folgendes Problem. Bei einer Webanwendung die gerade schreibe sollen Nutzer angelegt werden können. Es gibt verschiedene Arten von Benutzer, wie z.B. Admin, Consultant, Customer usw. Jede Benutzerart hat verschiedene Daten. Die Consultanteingabe erfordert z.B. die Eingabe vin Vor- und Zunamen und die Customereingabe z.B. einen Firmennamen. Die Radiobutton habe ich wie folgt implementiert:

```
<h:selectOneRadio value="#{userListController.selectOneRadio}"
                          layout="lineDirection"
                          valueChangeListener="#{userListController.authorityChange}">
      <f:selectItems value="#{userListController.authoritiesMap}" var="authority"/>
     <a4j:support event="onchange" reRender="edituserpanel">
         <f:setPropertyActionListener target="#{userListController.authority}"
                                                value="#{userListController.selectOneRadio}"/>
     </a4j:support>
 </h:selectOneRadio>
```
Mein ControllerBean hat folgende Form:

```
@Controller(value "userListController")
public class UserListController implements ActionListener {
...
        private String authority;
        private String selectOneRadio;
        private List<SelectItem> authoritiesMap;
...
    public void init(){
    ...
        authoritiesMap = new ArrayList<SelectItem>();
        this.messageController = new MessageController();
        for (Role role : Arrays.asList(Role.values())) {
            String value = messageController.getMessage("user_role_"+ role.toString());
            SelectItem selectItem = new SelectItem(value,value);
            if( ((String)selectItem.getValue()).equals("Anbieter") || ((String)selectItem.getValue()).equals("Besucher"))
                selectItem.setDisabled(true);
            authoritiesMap.add(selectItem);
        }
        this.selectOneRadio = "Kunde";
    ...
    }

    public void setAuthority( String authority) { this.authority = authority; }

    public void authorityChange(ValueChangeEvent event){
        try{
            HtmlSelectOneRadio radio = (HtmlSelectOneRadio)event.getComponent();
            this.authority = radio.getLabel();
        }catch(Exception e){
            System.out.println(e.getMessage()+" at authorityChange().");
        }
    }
...
}
```
Wenn das Modalpanel mit den RadioButton geöffnet wird ist auch Kunde ausgewählt, jedoch sobald ich den Wert ändere oder überhaupt auf einen RadioButton klicke öffnet er zwar die Methode, übergibt aber jedes Mal den Wert null als newValue. Bei Anlegen klappt auch alles. D.h. er legt alle RadioButtons an und setz auch die disabled, die disabled sein sollen. Bloß warum übergibt er beim onchange-event bzw. dem ValueChangeListener immer die Wert null???

Vielen Dank für eure Hilfe!!!


----------



## JimPanse (8. Aug 2011)

bluer hat gesagt.:


> Hi Leute,
> 
> 
> public void setAuthority( String authority) { this.authority = authority; }
> ...


Du fragst aber das Label ab und nicht: 
	
	
	
	





```
event.getNewValue();
```

Greetz


----------



## bluer (8. Aug 2011)

Das Problem war, dass newValue gleich null war.  Habe das Problem aber mittlerweile gelöst, nur leider vergessen das hier zu markieren. Sorry!
Lösung: HTML-Code:

```
<h:selectOneRadio value="#{userController.selectOneRadio}"
                                                     disabled="#{userController.succeed}"
                                                      layout="lineDirection"
                                                      immediate="true">
                                        <f:selectItems value="#{userController.authoritiesMap}"/>
                                        <a4j:support event="onclick"  reRender="additionalinfos" ajaxSingle="true" />
                                    </h:selectOneRadio>
```
Java-Code:

```
public void setSelectOneRadio( String selectOneRadio) {
        this.selectOneRadio = selectOneRadio;
        if( !this.authority.equals(this.selectOneRadio))
            if( this.selectOneRadio.equals("Admin") ||this.selectOneRadio.equals("Berater")){
                this.authority = this.selectOneRadio;
                this.user.setCustomer(null);
                this.user.setConsultant(new Consultant());
            }else{
                this.authority = this.selectOneRadio;
                this.user.setCustomer(new Customer());
                this.user.setConsultant(null);
            }
    }

    public String getSelectOneRadio() { return this.selectOneRadio; }
```


----------

