Java 如何在jsp中的forEach循环中添加会话属性?

Java 如何在jsp中的forEach循环中添加会话属性?,java,jsp,session,model-view-controller,onclick,Java,Jsp,Session,Model View Controller,Onclick,我是java初学者,需要一些帮助。我正在开发一个允许用户管理文本项目的web应用程序。我使用Spring作为框架,必须使用MVC模型 一个用户可以有多个项目。它们都显示在“我的项目”视图中。所有项目的列表都在foreach循环中管理 我想让这些项目项目可以点击:当用户点击项目时,它必须在新页面中打开。为此,我必须传递关于什么项目失败的信息。我试图从jsp将项目名称附加到会话,但编译器不接受onlick部分。 我的这部分代码摘要如下所示: <c:forEach var="project" i

我是java初学者,需要一些帮助。我正在开发一个允许用户管理文本项目的web应用程序。我使用Spring作为框架,必须使用MVC模型

一个用户可以有多个项目。它们都显示在“我的项目”视图中。所有项目的列表都在foreach循环中管理

我想让这些项目项目可以点击:当用户点击项目时,它必须在新页面中打开。为此,我必须传递关于什么项目失败的信息。我试图从jsp将项目名称附加到会话,但编译器不接受onlick部分。 我的这部分代码摘要如下所示:

<c:forEach var="project" items="${showProject}">
    <div class="manageListItem" onclick="window.location.assign('/myProjects.secu', 'currentProject.secu')";"<%session.setAttribute("project", ${project.title});>
    <td><c:out value="${project.title}"/></td>
</c:forEach>


您的双引号数目错误

你为什么不简化你的表达,一个接一个地添加内容?

  • showProject位于请求/会话/应用程序范围内,因此您的jsp可以使用EL进行访问
  • showProject属于集合类型
MVC模式 将java代码片段放入jsp视图通常是一个坏主意。MVC模式应该在您的案例中使用。您需要创建一个servlet,以获取servlet中的项目列表:

// import omitted
@WebServlet("/getProjects")
public class ProjectServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // service layer that can get a list of projects
        ProjectService projectService = new ProjectService();
        List<Project> projectList = projectService.getListOfProjects();
        request.setAttribute("showProject", projectList);
        request.getRequestDispatcher("/projects.jsp").forward(request,response);
    }
}
//忽略导入
@WebServlet(“/getProjects”)
公共类ProjectServlet扩展了HttpServlet{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
//可以获取项目列表的服务层
ProjectService ProjectService=新的ProjectService();
List projectList=projectService.getListOfProjects();
setAttribute(“showProject”,projectList);
request.getRequestDispatcher(“/projects.jsp”).forward(请求,响应);
}
}
在projects.jsp中

<c:forEach var="project" items="${showProject}">
    <div>
    <a href="/your/project/singleProjectServlet?pid=${project.id}">${project.title}</a>
    </div>
</c:forEach>

解释
  • 用户单击指向您的项目servlet的链接
  • 您的servlet获取项目列表(从任何数据源,最有可能是数据库)
  • 然后,servlet保存请求范围内的项目列表
  • 转发到jsp视图
  • 您的jsp视图将使用EL从请求范围获取项目列表
  • forloop中的每个项目标题都是指向单个ProjectServlet的链接
  • 在singleProjectServet中,您将获得pid查询参数,并执行您想要的任何操作,例如检索项目详细信息或将其保存在会话中。
    以下是如何将会话中的对象保存到Servlet中:

    request.getSession().setAttribute(“项目”,projectObject)

  • 通过在查询参数中传递的pid可以获得projectObject
从这里开始 很难将初学者可能需要做的所有事情都放在这个小的答案区域。希望我的回答能引导你走向正确的方向。 在你做任何其他事情之前,强烈推荐这本书:

网上还有很多简单的教程可以帮助您入门,只需搜索关键字“jsp servlet mvc”

很高兴编写代码,希望能有所帮助。

我不知道如何简化这个表达式。你能用代码显示一下吗?