2011-03-28 8 views
0

양식이 가득한 JSP 페이지가 있습니다. 제출을 클릭하면 getParamValues ​​메소드를 사용하여 측량의 양식 값을 읽는 것으로 가정되는 서블릿으로 이동하지만 작동하지 않습니다. getParamValues에서 String 배열을 인쇄하려고하면 nullpointerexceptions이 계속 발생합니다. 여기 JSP에서 양식 값을 읽을 수 없습니다.

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); 
} 

가 GAE에서 실행, 관련 JSP 코드 : 여기

는 관련 서블릿 코드까지 주어진 정보, a의 유일한 원인을 바탕으로

<%@ 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

+0

jsp 코드를 게시 할 수 있습니까? – Lalchand

답변

0

NPE는 <input>, <select> 또는 <textarea> 요소가 있고 name="questNum"이 서블릿에 제출되는 HTML 형식의 모든 위치에 있지 않다는 것입니다.


업데이트 JSP 코드에 따라 : 입력 필드보다 제출 버튼이 다른 HTML 형식으로 참이다. 입력란과 마찬가지로 HTML 양식에 제출 버튼을 입력해야합니다. 이 시점에서 명확하지 않은 기능 요구 사항에 따라 제출 버튼을 표 셀로 옮기거나 표 셀의 <form>을 제거하고 전체 표를 큰 <form> 안에 넣어야합니다. doGet()doPost() 혼합 구체적인 문제에 관련없는


이 특정한 경우에 가난한 방법입니다. 매개 변수를 전달하지 않고 브라우저 주소 표시 줄에 URL을 입력하여 서블릿을 열면 은 확실히 NPE를 가져옵니다. 그들도 똑같이하지 마라. doGet()전처리 요청에만 사용하고 doPost()에만 후속 절차 요청을 사용하십시오. 예를 들어, JSP 스크립틀릿<% %>에있는 모든 Java 코드는 doGet() 메서드에서 수행해야하며 HTML 코드는 JSTL <c:forEach> 태그로 반복해야합니다.

+0

링크가 작동하지 않아 죄송합니다. 여기 JSP의 코드가 있습니다. 모든 것이 Google App Engine에 있어야합니다. – Delanoy

0

코드에 많은 형태가 있다고 생각합니다. 설문 조사 제출 버튼을 누르면 서블릿에 값이 전송되지 않고 버튼의 값만 전송됩니다.

해결 방법 : (당신 제공된 코드에 기반) 나는 당신의 코드에서 어떤 태그를 제거

 <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

관련 문제