# dringend: jsf: set-Methode aufrufen



## schaefli (2. Apr 2007)

hallo!
Folgendes Problem:
Wenn ich auf den Button "importieren" klicke, dann möchte ich den boolean-Wert von selected auslesen. Dieser ist immer false, auch wenn ich die checkbox markiere. Beim debuggen bin ich drauf gekommen, dass die setter-Methoden aus der Klasse CWData nie aufgerufen werden! Weiß jemand, an was das liegen könnte?


```
<h:dataTable binding="#{JCWPage.t_importCws}" headerClass="list-header" id="t_importCws" rendered="#{JCWPage.importRender}"
                            rowClasses="list-row-even,list-row-odd" style="left: 288px; top: 192px; position: absolute" value="#{JCWPage.myDataList}" var="dataList">
                            <h:column binding="#{JCWPage.c_select}" id="c_select">
                                <f:facet name="header">
                                    <h:outputText binding="#{JCWPage.outputText7}" id="outputText7" value="Auswählen"/>
                                </f:facet>
                                <h:selectBooleanCheckbox binding="#{JCWPage.checkbox1}" id="checkbox1" value="#{dataList.selected}"/>
                            </h:column>
                            <h:column binding="#{JCWPage.c_name}" id="c_name">
                                <f:facet name="header">
                                    <h:outputText binding="#{JCWPage.outputText4}" id="outputText4" value="Name"/>
                                </f:facet>
                                <h:outputText binding="#{JCWPage.outputText3}" id="outputText3" value="#{dataList.name}"/>
                            </h:column>
                            <h:column binding="#{JCWPage.c_date}" id="c_date">
                                <f:facet name="header">
                                    <h:outputText binding="#{JCWPage.outputText6}" id="outputText6" value="Erstellungsdatum"/>
                                </f:facet>
                                <h:outputText binding="#{JCWPage.outputText5}" id="outputText5" value="#{dataList.date}"/>
                            </h:column>
                        </h:dataTable>
```


```
import java.util.List;

public class CWData {
    
    private int id;
    private String name;
    private String date;
    private boolean selected;
    
    /** Creates a new instance of CWData */
    public CWData() {
    }
    
    public CWData (int id, String name, String date, boolean selected)
    {
        this.id=id;
        this.name=name;
        this.date=date;
        this.selected=selected;
    }
    
     public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getDate() {
        return date;
    }
    
    public boolean isSelected()
    {
        return selected;
    }

  
    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDate(String date) {
        this.date = date;
    }
    
    public void setSelected (boolean selected)
    {
        this.selected = selected;
    }
}
```


```
public String b_import_action() {
        // TODO: Process the button click action. Return value is a navigation
        // case name where null will return to the same page.
           importRender=false;
           myDataItems = new ArrayList();
           System.out.println("MyDataList: " + getMyDataList().size());
        for (Iterator iter = getMyDataList().iterator(); iter.hasNext();) {
            myDataItem = (CWData) iter.next();
            if (myDataItem.isSelected()) {
                myDataItems.add(myDataItem);
                myDataItem.setSelected(false); 
            }
        }
...
```

myDataItem.isSelected() liefert immer false...

Brauche bitte dringend Hilfe!


----------



## y0dA (4. Apr 2007)

Also wenn du folgende Zeile meinst:
<h:selectBooleanCheckbox binding="#{JCWPage.checkbox1}" id="checkbox1" value="#{dataList.selected}"/> 

dann würde ich vorschlagen, dass du hier noch einen "valueChangeListener" hinzufügst - sonst wird der neue Wert (in deinem Fall true) nicht gesetzt.


----------



## Troi (4. Apr 2007)

Hi,
mach mal aus isSelected() getIsSelected() und schau ob die Methode aufgerufen wird.


----------



## schaefli (5. Apr 2007)

und was soll ich in dem valueChangedListener machen?


----------



## schaefli (5. Apr 2007)

also, in dem valueChangedListener lauf ich noch einmal alle Elemente durch, nur isSelcted is wieder überall false...


----------



## KSG9|sebastian (5. Apr 2007)

du sollst in dem valuechangelistener auch die setSelected-Methode aufrufen. Dass da alles false ist is mir auch klar


----------



## y0dA (5. Apr 2007)

Jo, der ValuechangeListener bekomme ja ein valueChangeEvent in welchem der neue Wert steht - da setzt du dann den neuen Wert mittels setter.


----------



## schaefli (5. Apr 2007)

was repräsentiert dieser neue wert von dem event?

ich habe ja eine liste mit elementen, woher weiß ich, welche checkbox geändert wurde?


----------

