2010-08-04 4 views
2

J'ai un objet dans ma classe Action qui contient une liste d'objets en interne, j'essaye de créer un écran CRUD pour cet objet. Ma classe d'action et de haricots sont donnés ci-dessous,Struts2 modifiant un objet avec l'arborescence d'objets

/** 
* @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; 
} 

MON GRAIN

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; 

MON JSP FICHIER

<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> 

Maintenant, mon problème est lorsque la valeur des haricots dans le arraylist est modifié dans la JSP, la même chose n'atteint pas la méthode d'enregistrement de la classe d'action. La valeur reste la même.

Cordialement, Rohit

Répondre

1

résoudre ce problème

<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> 

Lorsque vous soumettez le formulaire les haricots vont peuplé.

Cordialement, Rohit

+0

si le grain a une liste en elle-même, alors que traversal de cette liste est possible, mais qu'en est-il de sauver cette liste dans un bean sur la soumission de formulaire? –

0

Here est un exemple de travail (projet Netbeans 6.9) illustrant comment itérer sur un tableau ou d'une liste d'objets.

De même, comment soumettre le formulaire de sorte que la liste des objets soit recréée lors de la soumission.

Simplement résoudre les références et y aller.

0

J'ai résolu le problème:

Ma 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> 

Mon action

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; 
} 

} 
Questions connexes