java - 将表单输入值作为对象列表从 JSP 页面传递到 Servlet

标签 java jsp servlets jstl backing-beans

这是一个简化(非现实世界)示例。假设有一个域模型 - 一个类Movie,它有一个 Actor 列表。类 Actor 具有三个字段(namebirthDaterolesNumber)。以下代码是此场景的说明:

Movie.java

public class Movie {

    // some fields

    private List<Actor> actors;

    // getters and setters
}

Actor.java

public class Actor {

    private String name;

    private Date birthDate;

    private int rolesNumber;

    // getters and setters
} 


还有一个 JSP 页面,我们在其中循环输出具体电影中每个 Actor 的信息,用户可以更新相应的文本字段值并将更改提交到 servlet:

actorsUpdate.jsp

...
<c:forEach items="${movie.actors}" var="actor">
    <table>
        <tr>
            <th>Name</th>
            <td><input type="text" value="${actor.name}" /></td>
        </tr>
        <tr>
            <th>Birth Date</th>
            <td><input type="text" value="${actor.birthDate}" /></td>
        </tr>
        <tr>
            <th>Number of Previous Roles</th>
            <td><input type="text" value="${actor.rolesNumber}" /></td>
        </tr>
    </table>
    <hr />
</c:forEach>
...


众所周知,为了检索 servlet 中的文本字段,可以使用 ServletRequest 的方法,例如 getParameter() getParameterValues() 等等。但是如何将更新的输入字段作为对象列表检索(以便将每三个相关值分组)?

如果是 Spring 项目我们可以使用 Spring 的 <form:form modelAttribute="modelName">
标签并在 modelAttribute 中定义一个支持对象。但是纯 JSP/Servlet 项目怎么样?

可能的解决方案

可能的解决方案之一是在文本输入的“name”属性中分配名称并附加varStatus.index,如下所示:

<c:forEach items="${movie.actors}" var="actor" varStatus="counter">
    <table>
        <tr>
            <th>Name</th>
            <td><input type="text" name="name${counter.index}" value="${actor.name}" /></td>
        </tr>
        ...
    </table>
    <hr />
</c:forEach>

因此,该索引将允许我们识别与一个对象相关的值。我们还可以生成一些隐藏的输入字段,在其中存储循环计数(多个参与者),然后在 servlet 中我们可以检索与一个对象相关的值,如下所示:

List<Actor> actors= new ArrayList<Actor>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < count; i++) {
    String name= request.getParamater("name" + i);
    Date birthDate = dateFormat.parse(request.getParamater("birthDate" + i));
    int rolesNumber = Integer.parseInt(request.getParamater("rolesNumber" + i));

    Actor actor = new Actor(name, birthDate, rolesNumber);
    actors.add(actor);
}

我的问题是:

  1. 是否有另一种更优雅、更有效的方法将更新后的文本字段值作为对象列表传递到 servlet?

  2. 有没有与 Spring 的 <form:form> 的解决方案类似或等效的解决方案纯 JSP/JSTL/EL/Servlet 世界中的标签?


更新

似乎没有人知道上述问题的答案。接受的答案并不完全是我所要求的(请参阅我的评论)。

似乎没有与 Spring 的 <form:form modelAttribute> 等效的东西标签或纯 Servlet/JSP 领域中的类似内容。

嗯,满了Java EE ,或Spring Framework , Apache Struts或另一个强大的web application framework来救援!

最佳答案

您可以对所有输入使用相同的名称(修订号)并使用

String[] revisionNumber = request.getParamaterValues("revisionNumber") 获取数组。

关于java - 将表单输入值作为对象列表从 JSP 页面传递到 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784402/

相关文章:

java - 在 servlet 中获取、抓取和处理外部网站,我应该在 doGet 还是 doPost 中进行?

Java 应用程序 NoClassDefFoundError

java.lang.AssertionError : Status expected:<200> but was:<400>

jsp - Struts 2 带有 OGNL 的动态消息

javascript - 读取数据产生 null

java.lang.NullPointerException-登录 servlet

java - 根据 JVM 版本调用函数

java - 如何触发调整大小事件?

javascript - 使用ajax响应显示多个图像

java - 如何访问jsp中输入的当前页面url?