java - JSP 和 Java - 使用 jslt forEach 在 JSP 中显示数据 - 如何访问较低的元素

标签 java spring list jsp foreach

我有一个任务要做,我需要获取响应对象中返回的数据,并将其发送到 JSP。我需要做的是将其呈现在我使用 javascript 和 jquery 创建的菜单列表中 - (效果很好,它只需要数据)。

我正在使用 Spring,这是我的 Java 代码 - 这显示了对象:

@Controller
public class WordListController {

    /* @version $Revision: $ $Date: $ */

    @Autowired
    private FrontendServiceFacade FrontendServiceFacade;

    private final Logger logger = Logger.getLogger(this.getClass());

    @RequestMapping("/ViewWords")
    public String WordListRequestController(Model model) {

        WordListRequest request = new WordListRequest();
        WordListResponse response;

        request.setLibraryId("LIB_CODE_1");

        try{
            response = (WordListResponse)FrontendFacade.getWordList(request);           
        }catch(Exception e){
            //TODO Process Exception
            e.printStackTrace();
            return null;
        }

        List<UserBooksType.Book> returnedWordBooks = null;
        List<UserBookPagesType.Page> returnedWordPages = null;
        List<WordsType.Word> returnedWords = null;
        List<WordPageList> WordPageList= new ArrayList<WordPageList>();

        int bookSize = 0;
        int pageSize = 0;
        int wordSize = 0;
        String bookId = "";
        String pageName = "";
        String wordId = "";

        returnedWordBooks = response.getDataLoad().getUserBooks().getBook();
        bookSize = response.getPayLoad().getUserBooks().getBook().size();

        WordPagesList wordPagesList = new WordPagesList();

        ArrayList<BookList> bookList = new ArrayList<BookList>();
        ArrayList<PageList> pageList = new ArrayList<PageList>();
        ArrayList<WordList> wordList = new ArrayList<WordList>();

        // Loop <Book>
        for (UserBooksType.Book book : returnedWordBooks) {
            System.out.println("Book Loop");

            bookId = book.getBookId();

            // *********************************************
            BookList bookL = new BookList();
            bookL.setBookId(bookId);
            // *********************************************

            returnedWordPages = book.getUserBookPages().getPage();
            pageSize = book.getUserBookPages().getPage().size();

            // Loop <Pages>
            for (UserBookPagesType.Page page : returnedWordPages) {

                pageName = page.getName();

                returnedWords = page.getWords().getWord();
                wordSize = page.getWords().getWord().size();

                // Loop <Word>
                for (WordsType.Word word : returnedWords) {
                    System.out.println("Word Loop");

                    wordId = word.getWordId();

                    WordPageList WordPage = new WordPageList();

                    WordPage.setBookId(bookId);
                    WordPage.setPageName(pageName);
                    WordPage.setWordId(wordId);

                    WordPageList.add(WordPage);

                }

            }
        }
        // model.addAttribute("ViewWords", WordPageList); // I dont want to pass
        model.addAttribute("ViewWords", response); // I want to pass this
        return "ViewWords";
    }

}

这显示了对象是如何构建的。我想做的是将“response”对象直接传递给JSP,而不是“WordPageList”列表。

有没有办法可以直接传递这个对象,然后它们在 JSP 上循环访问该对象。

这是我的 JSP 代码:

<li ><span class="folder">Books</span>
    <ul>
        <c:forEach items="${ViewBooks}" var="WordPageList" varStatus="status">
            <li class="closed"><span class="folder">${WordPageList.bookId}</span>
                <ul>
                    <li class="closed"><span class="folder">${WordPageList.PageName}<br /></span>
                        <ul>
                            <li class="closed"><span class="folder">${WordPageList.wordId}<br /></span>
                                <ul>
                                    <li><span class="file">Option 1</span></li>
                                    <li><span class="file">Optoin 2</span></li>
                                    <li><span class="file">Option 3</span></li>
                                    <li><span class="file">Option 4</span></li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </c:forEach>
    </ul>
</li>

这并不能真正达到我想要的效果。我想做类似的事情,但是将“response”对象传递给JSP,然后循环通过这个对象来呈现数据,所以我认为这是使用嵌套的foreach语句,但我不知道如何做到这一点,或者如何评估这些观点。

我希望这是有道理的。

编辑:

这是请求的 WordListResponse 类:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "responseStatus",
    "errorNumber",
    "errorDescription",
    "data"
})
@XmlRootElement(name = "WordListResponse")
public class WordListResponse {

    protected int responseStatus;
    protected int errorNumber;
    @XmlElement(required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String errorDescription;
    @XmlElement(required = true)
    protected WordListResponse.Data data;

    /**
     * Gets the value of the responseStatus property.
     * 
     */
    public int getResponseStatus() {
    return responseStatus;
    }

    /**
     * Sets the value of the responseStatus property.
     * 
     */
    public void setResponseStatus(int value) {
    this.responseStatus = value;
    }

    /**
     * Gets the value of the errorNumber property.
     * 
     */
    public int getErrorNumber() {
    return errorNumber;
    }

    /**
     * Sets the value of the errorNumber property.
     * 
     */
    public void setErrorNumber(int value) {
    this.errorNumber = value;
    }

    /**
     * Gets the value of the errorDescription property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getErrorDescription() {
    return errorDescription;
    }

    /**
     * Sets the value of the errorDescription property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setErrorDescription(String value) {
    this.errorDescription = value;
    }

    /**
     * Gets the value of the data property.
     * 
     * @return
     *     possible object is
     *     {@link WordListResponse.Data }
     *     
     */
    public WordListResponse.Data getData() {
    return data;
    }

    /**
     * Sets the value of the data property.
     * 
     * @param value
     *     allowed object is
     *     {@link WordListResponse.Data }
     *     
     */
    public void setData(WordListResponse.Data value) {
    this.data = value;
    }


    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
    "userBooks"
    })
    public static class Data {

    @XmlElement(required = true)
    protected UserBooksType userBooks;

    /**
     * Gets the value of the userBooks property.
     * 
     * @return
     *     possible object is
     *     {@link UserBooksType }
     *     
     */
    public UserBooksType getUserBooks() {
        return userBooks;
    }

    /**
     * Sets the value of the userBooks property.
     * 
     * @param value
     *     allowed object is
     *     {@link UserBooksType }
     *     
     */
    public void setUserBooks(UserBooksType value) {
        this.userBooks = value;
    }

    }

}

最佳答案

嵌套的 forEach 与非嵌套的 forEach 完全一样:

<%-- iterate over the someList field of the someObject attribute --%>
<c:forEach var="outerItem" items="${someObject.someList}">
    <%-- now, outerItem is an attribute, and you may access its fields --%>

    <%-- iterate over the otherList field of the outerItem attribute --%>
    <c:forEach var="innerItem" items="${outerItem.otherList}">

        <%-- now, innerItem is an attribute, and you may access its fields --%>

    </c:forEach>

</c:forEach>

上面假设Spring Controller 在someObject属性中存储了一个具有以下结构的对象:

 class Xxx {
     public List<Yyy> getSomeList() {
         ...
     } 
 }

 class Yyy {
     public List<Zzz> getOtherList() {
         ...
     } 
 }

关于java - JSP 和 Java - 使用 jslt forEach 在 JSP 中显示数据 - 如何访问较低的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11154897/

相关文章:

java - Android临时保存位图图像

spring - 端点 SWS 没有适配器

list - 将多个参数传递给 map 的 func 参数

java.lang.NullPointerException 从 MySQL 查询创建语句

java - 在java中计算S3对象(文件夹)的大小

java - 如何验证 hibernate.jdbc.batch_size 是否正常工作?

Python - 解析字符串并将其转换为列表

python - 重新分配列表内列表的元素

使用接口(interface)的 Java 泛型方法

Spring-boot JPA连接到运行时提供数据库和模式的postgres