How to map a <ObjectA, List <ObjectB>> map into action in Struts 2

I have an event object, inside is Map<ObjectA, List<ObjectB>>, ObjectAis a label, and list<ObjectB>are table rows. With the following code, I can correctly display the tables, but when I submit the form to the class Action, it is displayed inside the event null.

JSP CODE:

<s:iterator value="event.planMap" var="map" >
    <h4>Plan Type: <s:property value='key' /></h4>
    <table id="plan">
    <s:iterator value="value" status="stat" var="detail" >
        <tr>
            <td><input type="text" id="name" name="event.planMap['%{#map.key}'][%{#stat.index}].name" value="<s:property value='name'/>"/></td>
            <td><input type="text" id="text" name="event.planMap['%{#map.key}'][%{#stat.index}].text" value="<s:property value='text'/>"/></td>
            <td><input type="text" id="contact" name="event.planMap['%{#map.key}'][%{#stat.index}].contact" value="<s:property value='contact'/>"/></td>
        </tr>
        </s:iterator>
    </table>
</s:iterator>

@Andrea and Roman, so I changed the code. The table display is correct, but I got an error, and she went to the tab "Result". If I delete planMap, the action will be successful. At least I know what a mistake planMap. Modified Code:

definition Event:

public Event {
    private Map<Object_A, Object_B> planMap;
    public Map<Object_A, Object_B> getPlanMap {
           return this.planMap;
    }

    public void setPlanMap(Map<Object_A, Object_B> planMap) {
           this.planMap = planMap;
    }
}

definition Object_B:

public Object_B {
    private List<Object_C> details;

    public List<Object_C> getDetials() {
           return this.details;
    }
    public void setDetails(List<Object_C> details) {
           this.details = details;
    }
}

JSP code:

<s:iterator value="event.planMap" status="mStat"  >
    <h4>Plan Type: <s:property value='key' /></h4>
    <table id="plan">
    <s:iterator value="value.details" status="stat">
    <tr>
        <td><input type="text" id="name" name="event.planMap['% {#mStat.index}'].details[%{#stat.index}].name" value="<s:property value='name'/>"/></td>
        <td><input type="text" id="text" name="event.planMap['%{#mStat.index}'].details[%{#stat.index}].text" value="<s:property value='text'/>"/></td>
        <td><input type="text" id="contact" name="event.planMap['%{#mStat.index}'].details[%{#stat.index}].contact" value="<s:property value='contact'/>"/></td>
    </tr>
    </s:iterator>
</table>
</s:iterator>
+2
source share
2

.

<s:iterator value="event.planMap" status="mStat"  >
<h4>Plan Type: <s:property value='key' /></h4>
<table id="plan">
<s:iterator value="value.details" status="stat">
<tr>
    <td><s:textfield id="name" name="event.planMap['%{key}'].details[%{#stat.index}].name" /></td>
    <td><s:textfield  id="text" name="event.planMap['%{key}'].details[%{#stat.index}].text" /></td>
    <td><s:textfield id="contact" name="event.planMap['%{key}].details[%{#stat.index}].contact" /></td>
</tr>
</s:iterator>

+1

Struts bean, List, Map .., , Java Bean, Map<ObjectA, ObjectC>, ObjectC wraps List<ObjectB>.

Struts , JSP .

. Class-conversion.properties KeyProperty_xxx=yyy, xxx Bean, yyy , .

. :

MyAction.java

/**
 * @return a Collection of Foo objects
 */
public Collection getFooCollection()
{
    return foo;
}

Foo.java

/**
 * @return a unique identifier
 */
public Long getId()
{
    return id;
}

+1

All Articles