Announcement

Collapse
No announcement yet.

Frage zu indexed properties

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage zu indexed properties

    Hallo

    ich iteriere in meiner JSP page durch eine Collection die ParameterBean enthält:
    <pre>
    <logic:iterate id="idx" name="adminHomepageForm" property="nodeParameters" type="com.hp.mms.webapp.ParameterBean">
    <tr><td class="tdblue"><bean:write name="idx" property="name"/></td>
    <td class="tdblue">
    <logic:equal name="idx" property="type" value="String"><html:text indexed="true" name="idx" property="value" size="40" maxlength="450"/></logic:equal>
    <logic:equal name="idx" property="type" value="Integer"><html:text indexed="true" name="idx" property="value"/></logic:equal>
    <logic:equal name="idx" property="type" value="Float"><html:text indexed="true" name="idx" property="value"/></logic:equal>
    <logic:equal name="idx" property="type" value="Boolean"><html:radio indexed="true" name="idx" property="value" value="true" /> true
    <html:radio indexed="true" name="idx" property="value" value="false"/> false </logic:equal>
    </td>
    <td class="tdblue"><bean:write name="idx" property="description"/></td>
    </tr>
    </logic:iterate>
    </pre>

    Die ParameterBeans enthalten verschiedene Eigenschaften wie name, description und value. Der User kann nun die values der Beans änderen und dan auf speichern klicken. Nun meine frage, wie setze ich die neuen Werte dieser ParameterBeans? In meiner Form Klasse habe ich folgende Methoden:

    <pre>
    public Collection getNodeParameters() {
    return this.params;
    }

    public void setNodeParameters(Collection c) {
    this.params = c;
    }</pre>

    DIe Methode setNodeParameters wird aber nie aufgerufen.

    Angela

  • #2
    Hallo,

    Auch ich habe bereits mit indexed Beans gearbeitet und leider keine wirkliche Lösung für dieses Problem gefunden. Aber ich habe ganz gute Erfahrungen mit einem kleinen Workaround gemacht - vielleicht hilft Ihnen das weiter?

    In der JSP zeige ich die Werte aus einer Collection an:

    <PRE>
    <html:form action="/indexed">
    <table>
    <logic:iterate id="current" name="list" type="de.loosensimnetz.struts.form.IndexedForm">
    <tr>
    <td><bean:write name="current" property="vorname"/></td>
    <td><bean:write name="current" property="nachname"/></td>
    <td><html:text indexed="true" name="current" property="alter"/></td>
    </tr>
    </logic:iterate>
    </table>
    <p><html:submit /></p>
    </html:form>
    </PRE>

    Im Quellcode der Seite findet man für das &lthtml:input&gt Element jetzt folgendes HTML:

    <PRE>
    <tr>
    <td>Manfred</td>
    <td>Mustermann</td>

    <td><input type="text" name="current[0].alter" value="42"></td>
    </tr>
    </PRE>

    In meiner Action frage ich jetzt explizit den Parameter "current[0].alter" ab:

    <PRE>
    public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception {
    IndexedForm indexedForm = (IndexedForm) form;

    String paramName, paramValue;
    int i=0;
    LinkedList list = (LinkedList) request.getSession().getAttribute("list");
    ListIterator iter = list.listIterator();
    IndexedForm idxForm = null;

    while (iter.hasNext()) {
    idxForm = (IndexedForm) iter.next();
    paramName = "current[" + i + "].alter";
    paramValue = request.getParameter(paramName);

    if (paramValue!=null) {
    idxForm.setAlter(paramValue);
    }

    i++;
    }

    return mapping.getInputForward();
    }
    </PRE>

    Das ist zwar getreu dem Motto "von hinten durch die Brust ins Auge" und vielleicht gibt es auch eine einfachere Variante - aber ich kenne sie leider nicht. Und das hier ist zwar hässlich, aber es funktioniert :

    Comment


    • #3
      Nachgeschoben:

      Natürlich wurde der HTML Quellcode vom Server gefressen . Ich versuche es hier nochmnal:

      &ltinput type="text" name="current[1].alter" value="4"&g

      Comment

      Working...
      X