【问题标题】:How to access form values in a servlet?如何访问 servlet 中的表单值?
【发布时间】:2013-07-30 20:34:30
【问题描述】:

我有下面的jsp代码。

<table id="myTable" border="0" cellspacing="0" style="border-spacing:0; width:100%;border-collapse: collapse;">
            <%
                List<Object> object = (List<Object>)request.getAttribute("myContact");
        for(int i=0;i<object.size();i++){
                MyModel myModel = (MyModel)object.get(i);
                String mail = myModel.getmail()!=null ? myModel.getmail().toString().trim() : "";
                String title = myModel.gettitle()!=null ? myModel.gettitle().toString().trim() : "";
                String name = myModel.getname()!=null ? myModel.getname().toString().trim() : "";               
            %>


            <tr>
            <td class="table-border-bottom"><label for="name">Name:</label></td>
            <td class="table-border-bottom"><input id="name" type="text" value='<%=name%>' name="name" class="required" style="height: 17px;"/>
            </td>
            <td class="table-border-bottom"><label for="contactTitle">Title:</label></td>
            <td class="table-border-bottom"> <input id="title" type="text" value='<%=title%>' name="title" class="required" style="height: 17px;"/>

            </td>
            <td class="table-border-bottom"><label for="mail">Email:</label></td>
            <td class="table-border-bottom"><input id="mail" type="text" value='<%=mail%>' name="mail" class="required email" style="height: 17px; "/>

            </td>
            </tr>

    <% } %>

            <tr align="center">
            <td valign="bottom" colspan="6" style="height: 45px; ">
            <input type="button" id="submit" name="submit" value="Save" style="width: 80px ; height:24px; text-align: center;border-radius: 10px 10px 10px 10px;"/> 
            <input type="button" id="revert" name="revert" value="Revert" style="width: 80px ; height:24px;text-align: center;border-radius: 10px 10px 10px 10px;"/></td>
            </tr>

      </table>  

要访问表单值,我可以在 servlet 中编写如下代码:

String name = request.getParameter("name");
    String title = request.getParameter("title");
    String email = request.getParameter("email"); 

但我的表格是动态填充的。我不会知道它有多少参数,因为表单将有很多字段,并且表单是通过循环从 db 返回的列表来填充的。 此外,在表单中,输入名称已被硬编码。由于我将有许多基于 db 返回列表的字段,我该如何避免并为输入元素提供唯一名称?

我该如何克服这个问题?

谢谢!

【问题讨论】:

  • 另外不建议在你的jsp中包含java代码
  • 在您的 servlet 中,您可以保存在一个数组中,以解决您可以插入的动态填充表,例如和按钮,我遇到了类似的问题,但我决定不直接显示咨询我只显示当有人按下按钮时。另一方面,我使用了 EXTjs,因为它易于用于网格显示。
  • 您可以轻松创建唯一字段 但是,请避免在 jsp 中编写脚本!

标签: java jsp servlets


【解决方案1】:

这里最基本的使用是JSTL core:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
<c:forEach items="${myModel}" var="${myContact}" varStatus="count">
    <tr>
        // I am setting the unique name for each input here
        <td><input type="text" name="name_${count.index}"/></td>
        <td>${myModel.name}</td>
      ........
    </tr>
</c:forEach>

我有already answered your question earlier

请阅读How to avoid Java Code in JSP-Files?


但这里在 servlet 中访问许多同名的输入

你可以使用ServletRequest#getParameterNames():

返回包含此请求中包含的参数名称的字符串对象的枚举。如果请求没有参数,则该方法返回一个空 Enumeration。

从 Servlet 中的request 对象获取所有参数的示例代码:

Enumeration allParameterNames = request.getParameterNames();
while(allParameterNames.hasMoreElements())
{
    Object object = allParameterNames.nextElement();
    String param =  (String)object;
    String value =  request.getParameter(param);
    pw.println("Parameter Name is '"+param+"' and Parameter Value is '"+value+"'");
}    

你也可以使用ServletRequest#getParameterMap()方法。

返回此请求参数的 java.util.Map。请求参数是随请求发送的额外信息。对于 HTTP servlet,参数包含在查询字符串或发布的表单数据中。

【讨论】:

  • Yes..u 已经回答说正在访问 jsp 中的列表。但在这里访问 servlet 中具有相同名称的许多输入。谢谢!
  • @user1016403 查看发布的代码以了解如何设置唯一名称。
猜你喜欢
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多