Announcement

Collapse
No announcement yet.

struts-Tags verschachteln....

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

  • struts-Tags verschachteln....

    Hi Leute,

    eine kurze Frage an die ganz großen Experten:
    Wie kann ich folgendes Konstrukt so hinbiegen, dass es korrekt ausgeführt wird:
    <pre>
    &lt;html:link href="/browser.do?browser=property&obid=&lt;bean:write name='child' property='obid' /&gt;"&gt;&lt;img src="img/info.gif" border="0"&gt;&lt;/html:link&gt;
    </pre>

    Bei browser.do handelt es sich um eine benutzerdefinierte Aktion, die klaglos ihren Dienst verrichtet. child ist ein Object, das aus einer ArrayList stammt, welche via logic:iterate durchlaufen wird. Dieses Object hat eine property namens getObid(), die einen Stirng zurückliefert.

    Geht das überhaupt irgendwie?? Oder geht das nur mit nomalen a hrefs??

    Gruß und vielen Dank für alle Hinweise,
    Andreas

  • #2
    Hallo Andreas,

    Deine Konstruktion ist nicht möglich. Du mußt das &lt;html:link&gt; tag erst schließen, bevor Du ein neues tag öffnest.
    Innerhalb von reinem HTML ist die Konstruktion ok, mit &lt;a href&gt; würde es also klappen. Du kannst auch das gesamte href-Attribute als Scriptlet zusammenbauen, also z.b.

    <PRE>
    &lt;% String url ="/browser.do?browser=property&obid=" + ((MyBean)request.getAttribute("child")).getObid(); %&gt;
    &lt;html:link href="&lt;%= url %&gt;"&gt;Link&lt;/html:link&gt;
    </PRE>

    Dazu muß die Bean mit dem property getObid() im request scope vorhanden sein (den typ MyBean durch den tatsächlichen Typ der Bean ersetzen).

    Das funktioniert, ist aber nicht besonders schön. Speziell das &lt;html:link&gt; Tag bietet eine Möglichkeit, Parameter an die URL zu hängen. Du kannst in die child-bean zusätzlich zu getObid() eine Method einbauen, die folgendermaßen aussieht:

    <PRE>
    public Map getObidParam()
    {
    Map param = new HashMap;
    param.put("obid", getObid());
    return param;
    }
    </PRE>

    Dann sieht der Link so aus:

    <PRE>
    &lt;html:link href="/browser.do?browser=property" name="child" property="obidParam"&gt;Link&lt;/html:link&gt;
    </PRE>

    Natürlich kann die Map den browser-Parameter auch enthalten.

    Gruß,

    Alwi

    Comment


    • #3
      Hi Alwin,

      vielen Dank für deine Antwort. Funktioniert soweit. Nur eine kleine Frage habe ich noch:
      Wie setze ich das ganze jetzt für einen html:form-Tag um? der hat keine property...

      Gruß,
      Andrea

      Comment


      • #4
        Hi Andreas,

        Beim einem form werden sowieso alle Felder innerhalb des forms als Parameter übergeben. Du kannst also jederzeit hidden-fields einbauen, die dann als Parameter übergeben werden, also z.b.

        <PRE>
        &lt;html:hidden name="child" property="obid"/&gt;
        </PRE>

        Es wäre aber IMHO besser, die Statusinformationen, also z.b. die vom User gewählte obid, auf dem Server zu speichern, also z.b. in der session. Allerdings kenne ich Deine Anwendung nicht und weiß nicht ob das in Deinem Fall Sinn macht.

        Gruß,

        Alwi

        Comment

        Working...
        X