如何使用 struts、JSP 和 Java 从控制器获取数组

How to get an array from the controller using struts, JSP and Java

我想知道这里是否有人知道如何使用 Struts 从控制器获取数组?

showTeams.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="nl.***.controller.TeamController"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@include file="includes/layout.jsp" %>
<div class="col-lg-12">
    <h1>Alle Teams</h1>
    <table>
        <caption><h1>List of Teams</h1></caption>
        <th>ID Team</th>
        <th>Naam Team</th>
        <tr>
            <c:forEach var="team" items="${teams}">
                <td>${team.getId}<td>
                <td>${team.getName()}<td>
            </c:forEach>
        </tr>
    </table>
</div>
<a href="index.jsp">Back to Start</a>
<%@include file="includes/footer.jsp" %>

TeamController.java

package nl.***.controller;

import java.util.ArrayList;
import nl.***.datalayer.DAOTeam;
import nl.***.models.Team;
import com.opensymphony.xwork2.ActionSupport;
/**
 *
 * @author 
 */
public class TeamController extends ActionSupport{
    private String name;
    ArrayList<Team> teams = new ArrayList<Team>();

    public String execute() throws Exception{
        return "createTeam";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String addTeamToDB(String name){
        try{
            Team t = new Team(name);
            DAOTeam.getInstance().createTeam(t);
            return "<h1>Team " + name + " is toegevoegd aan de Database</h1>";
        }catch(Exception e){
        return "<h1>FAILED with message" + e.getMessage() + "</h1>"; 
        }
    }

    public String getAllTeams(){
        teams = DAOTeam.getInstance().loadTeams();
        System.out.println("ik ben er!!@#!EWDSRETGDFQTWTRE"); //for testing, removed when done
        //mapping.findForward("showTeams");
        return "getallteams";
    }
}

struts.xml

<struts>
<constant name="struts.devMode" value="true" /> 
    <package name="teamcreate" extends="struts-default">
      <action name="createTeam" 
            class="controller.TeamController" 
            method="execute">
            <result name="createTeam">/view/prossesTeam.jsp</result>
      </action>
    </package>
    <package name="teamLoad" extends="struts-default">
          <action name="showTeams" 
            class="controller.TeamController" 
            method="getallteams">
            <result name="getallteams">/view/showTeams.jsp</result>

      </action>
    </package>
</struts>

当我加载页面时,它没有在控制器中定义数组 'teams'。我已经尝试更改 struts.xml 中的值,但仍然没有。如果试图在 TeamController 中的执行函数中创建一个 if 语句以确保它甚至 运行 但我什么也没得到我不知道我做错了什么。

编辑: 我本质上想要的是,当你去 showTeams.jsp 时,它应该向你显示一个 table,所有使用 Struts 的团队。

我在过去 5 年里 struts 没有做过任何事情,所以我不确定你的控制器,但是如果你 copy/paste 你的 JSP 代码,那么你有一些语法问题。

<td>${team.getId}<td>
<td>${team.getName()}<td>

getId / getName() => 一个有括号,一个没有? 并且您不应该使用 getter 的名称,而应使用 属性。 喜欢:

<td>${team.id}<td>
<td>${team.name}<td>

如果语法正确,你至少应该得到一个空数组(就是headers)。

视图应从控制器返回结果 getallteams。因此,您应该调用 showTeams 操作将团队加载到操作 class 变量中。

private List<Team> teams = new ArrayList<Team>();

public List<Team> getTeams() { return teams; };

需要最后一个方法来评估 forEach 标签中的 teams

<c:forEach var="team" items="${teams}">
    <td>${team.id}<td>
    <td>${team.name}<td>
</c:forEach>