I didn't use JSP, the UI is programmatically created.

This is a part of the method which adds HtmlSelectOneRadio components to the
HtmlDataTable:

HtmlDataTable table = new HtmlDataTable();
    this.form.getChildren().add(table);
    table.setId(this.viewRoot.createUniqueId());
    table.setVar("row");
    table.setBorder(1);
    table.setCellspacing("0");
    table.setCellpadding("5");


// the snippet which creates the HtmlSimpleUIColumn components for the
table:

for (int i = 0; i < columns; i++) {
      column[i] = new HtmlSimpleColumn();
      table.getChildren().add(column[i]);

      if (i == 0) {

        HtmlOutputText hot = new HtmlOutputText();
        hot.setId(this.viewRoot.createUniqueId());
        ValueBinding vb = app.createValueBinding("#{row.matrixfragetext}");
        hot.setValueBinding("value", vb);
        hot.setEscape(false);

        column[i].setWidth("150");
        column[i].getChildren().add(hot);

      } else {

        String text = ((Auswahlmoeglichkeit)sortedAm.get(i - 1)).getText();
        HtmlOutputText header = this.createHtmlOutputText(text, null);
        column[i].setHeader(header);

        HtmlRadio radio = new HtmlRadio();
        radio.setId(this.viewRoot.createUniqueId());
        ValueBinding vb =
app.createValueBinding("#{row.htmlSelectOneRadioId}");
        radio.setValueBinding("for", vb);
        radio.setIndex(i - 1);
        column[i].getChildren().add(radio);
      }

    }


// the snippet which creates the HtmlSelectOneRadio components for each row
of the table:
List rowData = new ArrayList();
for (int i = 0; i < matrixfragetexte.length; i++) {
      Matrixfragetext mft = (Matrixfragetext)matrixfragetexte[i];

      HtmlSelectOneRadio radios = new HtmlSelectOneRadio(); // Tomahawk

      table.getChildren().add(radios);
      radios.setId(id);
      radios.setLayout("spread");
      radios.setRendererType("org.apache.myfaces.Radio");
      radios.setConverter(new IntegerConverter());

      List selectItems =
        SelectItemsCreator.createSelectItemsListByAuswMglWithoutLabel(sorted
Am);
      UISelectItems usi = new UISelectItems();
      usi.setValue(selectItems);
      radios.getChildren().add(usi);

      radios.setValue(selected); // initially selected value

      MatrixfrageRow row = new MatrixfrageRow();
      row.setMatrixfragetext(mft.getText());
      row.setHtmlSelectOneRadioId(radios.getId());
      rowData.add(row);
}

table.setValue(model); // contains the rowData ArrayList


When processing the user input, the HtmlSelectOneRadio components are
located by using the findComponent() method of the UIComponent class.
This works well. Then the submitted or local value is evaluated (taking the
one which is not null), and it's always the initially selected value, no
matter what had been selected by the user.

I hope you can imagine what's going wrong...


Many thanks,

Matthias

> -----Ursprüngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Auftrag
> von Martin Marinschek
> Gesendet: Mittwoch, 8. Februar 2006 20:19
> An: MyFaces Discussion
> Betreff: Re: Problem with evaluation of Tomahawk HtmlSelectOneRadio
> components inside UIData (programmatically created UI)
>
>
> Can you give us the JSP sources?
>
> regards,
>
> Martin
>
> On 2/8/06, Matthias Kahlau <[EMAIL PROTECTED]> wrote:
> > Hi!
> >
> >
> > I tried to use a Tomahawk HtmlDataTable to programmatically
> display a matrix
> > containing questions in the left column and some radiobuttons
> in the other
> > columns.
> >
> > I added a HtmlRadio component to each HtmlSimpleColumn
> instance. For each
> > row, I added a HtmlSelectOneRadio component to the table. The HtmlRadio
> > components "for" attribute uses a value-binding to the current
> row object of
> > the data set, to get the ID of the related HtmlSelectOneRadio component.
> >
> > I don't know if I've followed the right approach. The table is displayed
> > correctly, but the evaluation of the selected radiobuttons
> doesn't work. It
> > doesn't matter was has been selected, I always get value="1" for each
> > HtmlSelectOneRadio component.
> >
> > Maybe this is the wrong approach. Do I have to use only one
> > HtmlSelectOneRadio component with a component binding, and process the
> > selections by iterating over the UIData's data set, like it is done when
> > using JSP?
> >
> >
> > Following a Html code snippet of the data table:
> >
> > <table border="1" cellpadding="5" cellspacing="0">
> > <thead><tr><th width="150"></th><th>erste Am</th><th>zweite
> > Am</th><th>dritte Am</th><th>vierte Am</th></tr></thead>
> >
> > <tbody id="Form:_id15:tbody_element">
> >
> > <tr>
> > <td width="150">erste Teilfrage</td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_0:Frage_6_Teil_1" checked="checked"
> > value="1" />
> > </label></td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_0:Frage_6_Teil_1" value="2" />
> > </label></td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_0:Frage_6_Teil_1" value="3" />
> > </label></td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_0:Frage_6_Teil_1" value="4" />
> > </label></td>
> > </tr>
> >
> >
> > <tr>
> > <td width="150">zweite Teilfrage</td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_1:Frage_6_Teil_2" checked="checked"
> > value="1" />
> > </label></td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_1:Frage_6_Teil_2" value="2" />
> > </label></td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_1:Frage_6_Teil_2" value="3" />
> > </label></td>
> >
> > <td><label>
> > <input type="radio" name="Form:_id15_1:Frage_6_Teil_2" value="4"
> > /></label></td>
> > </tr>
> >
> > ....
> >
> > </tbody>
> > </table>
> >
> >
> >
> > Regards,
> >
> > Matthias
> >
> >
>
>
> --
>
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces

Reply via email to