2016-02-28 4 views
1

У меня есть JSP, который получает список коллекций из класса действий. Я повторяю этот список, и я хочу установить значения этого списка для другого объекта внутри другого класса действий через запрос формы. Когда я использую displayMovies.jsp, когда я использую тег <s:property в итераторе, он отображается на разных объектах коллекции. Я хочу сохранить или передать каждый из этих объектов в коллекции другому классу действий.Как выполнить итерацию по коллекции в JSP и установить значения в объекте в классе действий

displayMovies.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1" import="com.sans.model.Movie" %> 
<%@ taglib prefix="s" uri="/struts-tags"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 

Movie retrieval Page 
<br /> 
<s:iterator value="movieRetrievedArray" var="movieS"> 

<s:form action="movieDetails.action" method="post" id="movieDetailsForm"> 
    <s:property value="title"/><br /> 
    <s:property value="releaseDate"/><br /> 

    <s:hidden name="movieDetailedInformation.title" value="%{title}" id="hiddenMovie" /> 

    <img src="<s:property value="posterPath" />" onClick="test()"> 
</s:form> 
    <br /> 
    <br /> 
</s:iterator> 

<script type="text/javascript"> 

function test() { 
    document.getElementById("movieDetailsForm").submit(); 
} 

</script> 

</body> 
</html> 

MovieDetailsActions.java

package com.esi.actions; 

import java.util.Map; 

import javax.servlet.http.HttpServletRequest; 

import org.apache.struts2.ServletActionContext; 
import org.apache.struts2.convention.annotation.Action; 
import org.apache.struts2.convention.annotation.Result; 
import org.apache.struts2.convention.annotation.Results; 

import com.opensymphony.xwork2.ActionContext; 
import com.opensymphony.xwork2.ActionSupport; 
import com.sans.model.Movie; 

@SuppressWarnings("serial") 
@Results({ 
    @Result(name="success", location="/RetrieveMovies/movieDetails.jsp"), 
    @Result(name="input", location="/RetrieveMovies/movieError.jsp") 
}) 
public class MovieDetailsAction extends ActionSupport { 

    private Movie movieDetailedInformation = new Movie(); 

    @Action(value="movieDetails") 
    public String execute() { 


     System.out.println(movieDetailedInformation.getTitle()); 


     return SUCCESS; 
    } 

    public Movie getMovieDetailedInformation() { 
     return movieDetailedInformation; 
    } 

    public void setMovieDetailedInformation(Movie movieDetailedInformation) { 
     this.movieDetailedInformation = movieDetailedInformation; 
    } 
} 

ответ

0

Вы должны использовать status переменную на итератора тега.

<s:form action="movieDetails.action" method="post" id="movieDetailsForm"> 
<s:iterator value="movieRetrievedArray" var="movieS" status="status">  
    <s:property value="title"/><br /> 
    <s:property value="releaseDate"/><br />  
    <s:hidden name="movieDetailedInformationList[%{#status.index}].title" value="%{title}" id="hiddenMovie" /> 
    <br /> 
    <br />  
</s:iterator> 
    <img src="<s:property value="posterPath" />" onClick="test()"> 
</s:form> 

The movieDetailedInformationList является

private List<Movie> movieDetailedInformationList; 

public List<Movie> getMovieDetailedInformationList() { return movieDetailedInformationList; } 

Вам не нужно инициализировать movieDetailedInformationList, потому что Struts2 заполнить его с параметрами из запроса пост.

Класс Movie должен быть общедоступным и иметь конструктор по умолчанию, необходим публичный сеттер для title.

+0

Я пробовал это и его почти работал, но он всегда передает заголовок первого объекта индекса (0) каждый раз – Dankwansere

+0

Все в порядке, не используйте отрицательные индексы. –

+0

Извините, я не понимаю, что вы имеете в виду, не используйте отрицательные индексы? – Dankwansere