无法从JSP中读取表单值

无法从JSP中读取表单值

问题描述:

我有一个JSP页面,它是一个充满表单的表格。当我点击提交时,它会转到一个servlet,它假设使用getParamValues方法读取调查中表单的值,但它不起作用。当我尝试从getParamValues输出字符串数组时,我总是得到nullpointerexceptions。无法从JSP中读取表单值

下面是相关servlet代码:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { 
    resp.setContentType("text/plain"); 
    PrintWriter out = resp.getWriter(); 
    String[] nums = req.getParameterValues("questNum"); 
    out.println(nums[2]); 
} 

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { 
    doPost(req, resp); 
} 

下面是相关JSP代码,在GAE上运行:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ page import="com.surveycreator.service.persistence.SurveyPersistence" %> 
<%@ page import="com.surveycreator.service.model.Survey" %> 
<%@ page import="com.surveycreator.service.model.SurveyQuestion" %> 
<%@ page import="com.surveycreator.service.model.Survey" %> 
<%@ page import="java.util.List" %> 


<html> 
<head> 
<link type="text/css" rel="stylesheet" href="/stylesheets/main.css" /> 
</head> 

<body> 
<p>View Survey</p> 
<form action="/storesurvey" method="post"> 
<input type="submit" value="Submit Survey" /> 
</form> 




<% 
SurveyPersistence persist = new SurveyPersistence(); 
String surveyName = request.getParameter("content"); 
Survey survey = persist.getSurvey(surveyName); 
List<SurveyQuestion> question = survey.getSurvey(); 
out.println("<table border='1'><tr><th>QuestionNumber</th><th>Survey Question</th><th>(Yes/yes)(No/no)</th></tr>"); 
for (SurveyQuestion questionObject : question) { 
    int tableCounterString = questionObject.getQuestionNumber(); 
    String quest = questionObject.getQuestion(); 
    out.println("<tr><td><form><input id ='question' name='questNum' type='text' readonly='readonly' value='"+tableCounterString + " ' /></form></td><td><form><input id ='question' name='quest' type='text' readonly='readonly' value='"+quest + " ' /></form></td><td><form><input id ='ans' name='answer' type='text' value='' /></form></td></tr>"); 


} 


%> 
<%= survey.getSurveyName()%> 

</body> 
</html> 
+0

该链接导致HTTP 500错误页面,无论如何不是特别有用。只需发布相关的源代码。 – BalusC 2011-03-28 15:46:47

+0

你可以发布jsp代码吗? – Lalchand 2011-03-28 15:52:06

基于尽可能给出的信息,的唯一可能的原因NPE是,您只需在提交给servlet的HTML表单中的任何位置都没有任何<input>,<select><textarea>元素和name="questNum"


更新按照JSP代码:提交按钮确实在不同 HTML形式比输入字段。您需要将提交按钮放入相同的HTML表单中作为输入字段。根据功能要求(目前尚不清楚),您需要将提交按钮移动到表格单元格中,或者删除表格单元格中的<form>并将整个表格包裹在大<form>内。


无关的具体问题,混合doGet()doPost()是在这种特殊情况下的不良做法。如果你通过在浏览器地址栏中输入它的URL来打开servlet,而没有传递任何参数,那你肯定会得到NPE。不要让他们这样做。仅使用doGet()预处理请求和使用doPost()仅限于后处理请求。例如,您在JSP scriptlet<% %>中的所有Java代码应该在doGet()方法中完成,并且HTML代码应该由JSTL <c:forEach>标记重复。

+0

对不起,链接不起作用,这里是JSP的代码,我应该提到的一切都在Google App Engine上。 – Delanoy 2011-03-28 16:08:47

我认为你的代码有很多形式。当你按Submit Submit按钮时,没有值会被发送到servlet,而是按钮的值。

解决方案:(您提供的代码库)

 <head> 
    <link type="text/css" rel="stylesheet" 
href="/stylesheets/main.css" /> 
    </head> 

    <body> 
    <p>View Survey</p> 
    <form action="/storesurvey" method="post"> 
    <input type="submit" value="Submit Survey" /> 

    <% 
    SurveyPersistence persist = new SurveyPersistence(); 
    String surveyName = request.getParameter("content"); 
    Survey survey = persist.getSurvey(surveyName); 
    List<SurveyQuestion> question = survey.getSurvey(); 
    out.println("<table border='1'><tr><th>QuestionNumber</th><th>Survey Question</th><th>(Yes/yes)(No/no)</th></tr>"); 
    for (SurveyQuestion questionObject : question) { 
     int tableCounterString = questionObject.getQuestionNumber(); 
     String quest = questionObject.getQuestion(); 
     out.println("<tr><td><input id 
='question' name='questNum' type='text' readonly='readonly' 
value='"+tableCounterString + " ' 
/></td><td><input id 
='question' name='quest' type='text' readonly='readonly' value='"+quest + " 
' /></form></td><td><input id 
='ans' name='answer' type='text' value='' /></td></tr>"); 


    } 


    %> 
</form> <-----(this is the change) 
    <%= survey.getSurveyName()%> 

    </body> 
    </html> 

请注意,我在你的代码移除了一些标签。

试一试。如果有错误,请在这里发帖。 希望得到这个帮助。

NathanPhan