Struts2, модифицирующий объект с помощью массива объектов - PullRequest
2 голосов
/ 04 августа 2010

У меня есть объект в моем классе Action, который содержит внутренний массив объектов, я пытаюсь создать экран CRUD для этого объекта. Мой класс действий и бин приведены ниже,

/**
 * @author rohit
 *
 */
public class IRFeedMgmtAction extends ActionSupport implements ModelDriven<IRFeeds>,SessionAware,ServletRequestAware {

private static org.apache.log4j.Logger log = Logger.getLogger(IRFeedMgmtAction.class);

private HttpServletRequest request;

private Map session;

private IRAccountsDAO acctsDAO;

private IRFeeds feed = new IRFeeds();

/* (non-Javadoc)
 * @see com.opensymphony.xwork2.ActionSupport#execute()
 */
public String execute()
{
    return "success";
}

/**
 * @return
 */
public String add()
{
    IRUser user  = (IRUser) session.get("user");

    List<IRAccountUsers> twtUsers =  acctsDAO.getTwitterAcctByOrgId(user.getOrgId());
    feed.setTwtAccts(prepareTwitterAccounts(twtUsers));

    return "addFeed";
}

/**
 * @return
 */
public String save()
{
    IRFeeds fd = getFeed();
    ArrayList<IRFeedAccts> twtAccts = fd.getTwtAccts();

    System.err.println(fd.getFeedUrl());

    for (Iterator iterator = twtAccts.iterator(); iterator.hasNext();) 
    {
        IRFeedAccts irFeedAccts = (IRFeedAccts) iterator.next();
        System.err.println(irFeedAccts.getNumber());
    }

    return "saved";
}

/**
 * @return 
 * 
 */
private ArrayList<IRFeedAccts> prepareTwitterAccounts(List<IRAccountUsers> twtUsers)
{
    ArrayList<IRFeedAccts> twtAccts = new ArrayList<IRFeedAccts>();
    IRAccountUsers twtUser = null;
    IRFeedAccts feedAccnt = null;
    for (Iterator iterator = twtUsers.iterator(); iterator.hasNext();)
    {
        twtUser = (IRAccountUsers) iterator.next();

        feedAccnt = new IRFeedAccts();
        feedAccnt.setAccountId(twtUser.getSocialId());
        feedAccnt.setPic(twtUser.getPic());
        feedAccnt.setName(twtUser.getTwtUsrName());
        feedAccnt.setNumber(30);

        twtAccts.add(feedAccnt);
    }

    return twtAccts;
}

МОЯ БИНА

public class IRFeeds  implements java.io.Serializable {


 private Integer feedId;
 private Integer campId;
 private String feedUrl;
 private boolean active;
 private Date createdOn;
 private Date updatedOn;
 private String createdBy;

 private ArrayList<IRFeedAccts> twtAccts; 

 private ArrayList<IRFeedAccts> fbAccts;

 private ArrayList<IRFeedAccts> fbPages;

МОЙ ФАЙЛ JSP

<s:iterator value="#session.fd.twtAccts" status="twtAcct">
            <tr>
                <td>
                    <div style="width: 48px; float: left;"><img src="<s:property value="pic" />" /></div>
                    <div style="text-align: left;"><s:property value="name" /></div>
                </td>
                <td>
                    <s:textfield name="number"/>
                </td>
                <td>
                    <input type="text" /> 
                </td>
                <td>
                    <s:textfield name="signature"/> 
                </td>
            </tr>
            </s:iterator>

Теперь моя проблема в том, что когда значение bean-компонентов в массиве изменяется в JSP, то же самое не достигает метода сохранения класса действия. Значение остается прежним.

С уважением, Рохит

Ответы [ 3 ]

1 голос
/ 05 августа 2010

Решите эту проблему

<s:iterator id="twtFeedAccts" value="twtFeedAccts" status="twtAcct">
            <tr>
                <td width="250">
                    <img src="<s:property  value="%{twtFeedAccts[#twtAcct.index].pic}" />"  width="25px" height="25px"  />
                        <s:property  value="%{twtFeedAccts[#twtAcct.index].name}" />

                </td>   
                <td width="200">
                    <s:textfield id="twtFeedAccts[%{#twtAcct.index}].number" name="twtFeedAccts[%{#twtAcct.index}].number" value="%{twtFeedAccts[#twtAcct.index].number}" />
                </td>
                <td width="200">
                    <s:select id="twtFeedAccts[%{#twtAcct.index}].cycle" name="twtFeedAccts[%{#twtAcct.index}].cycle" value="%{twtFeedAccts[#twtAcct.index].cycle}"
                     label="Select a month"  list="#{'2':'2 hrs','4':'4 hrs', '6':'6 hrs', '12':'12 hrs', '24':'24 hrs'}" />
                </td>
                <td width="250">
                    <s:textfield id="twtFeedAccts[%{#twtAcct.index}].signature" name="twtFeedAccts[%{#twtAcct.index}].signature" value="%{twtFeedAccts[#twtAcct.index].signature}" size="40"/>
                </td>
                <td width="50">
                    <s:checkbox id="twtFeedAccts[%{#twtAcct.index}].selected" name="twtFeedAccts[%{#twtAcct.index}].selected" value="%{twtFeedAccts[#twtAcct.index].selected}"  />
                </td>
            </tr>
            </s:iterator>

Когда вы отправите форму, бобы будут заполнены.

С уважением, Рохит

0 голосов
/ 26 августа 2012

Я решил вопрос:

Мой JSP:

<s:iterator value="feedbackFor" var="feedbackFor" status="stat">
<tr>
<td><s:label> <s:property value="feedbackFor" /></s:label> </td>


<td><s:label><s:property value="empName"/></s:label></td>
<s:hidden name="feedbackFor[%{#stat.index}].feedbackBy" value="%{feedbackBy}"></s:hidden>
<s:hidden name="feedbackFor[%{#stat.index}].feedbackFor" value="%{feedbackFor}"></s:hidden>
<!--<s:hidden name="feedbackFor.[%{#stat.index}].positiveFeedback" value="%{positiveFeedback}"></s:hidden>-->
<td><s:textfield name="feedbackFor[%{#stat.index}].positiveFeedback" value="%{positiveFeedback}" size="100"/></td>
<td><s:textfield name="feedbackFor[%{#stat.index}].negetiveFeedback" value="%{negetiveFeedback}" size="100"/></td>
</tr>
</s:iterator>


</table>
<s:submit value="Submit Feedback"/>
</s:form>

Мое действие

public class FeedbackAction extends ActionSupport {

private static final long serialVersionUID = 1L;
private List<FeedbackDTO> feedbackFor;

private String employeeId;

public List<FeedbackDTO> getFeedbackFor() {
    return feedbackFor;
}

public void setFeedbackFor(List<FeedbackDTO> feedbackFor) {
    this.feedbackFor = feedbackFor;
}


public String getEmployeeId() {
    return employeeId;
}

public void setEmployeeId(String employeeId) {
    this.employeeId = employeeId;
}



public String getEmployees(){

    FeedbackHelper feedbackHelper = new FeedbackHelper();
    feedbackFor=feedbackHelper.getEmployeeList(employeeId);
    System.out.println("The feed back populated is "+ feedbackFor + "Size is "+ feedbackFor.size());
            return SUCCESS;
}

public String submitFeedback(){
    System.out.println("The feed back repopulated is "+ feedbackFor + "Size is "+ feedbackFor.size());
    return SUCCESS;
}

}
0 голосов
/ 24 января 2011

Здесь - рабочий пример (проект Netbeans 6.9), иллюстрирующий, как выполнять итерации по массиву или списку объектов.

Кроме того, как отправить форму так, чтобы список объектоввоссоздается при отправке.

Просто разрешите ссылки и приступайте.

...