2012-09-18 59 views
2

我需要從我的JSP轉到我的Servlet,然後返回到相同的JSP。問題是,當我回來時,我的所有文本字段都是空的。從JSP轉到Servlet,然後回到相同的JSP並且字段爲空

我該如何解決這個問題?備註:

  1. 該表格有method='post' enctype='multipart/form-data'
  2. 我正在使用按鈕提交。他們是正常的按鈕,執行JavaScript函數onclick,這個函數驗證文本字段,如果一切正常,然後調用submit()函數並提交表單。
  3. 的來自servlet的背部正在使用此代碼完成的:

    RequestDispatcher rd = request.getRequestDispatcher("/altaPerfil.jsp"); 
    rd.forward(request, response); 
    


附加信息:

我的JSP頁面類似於此:https://www.taringa.net/registro
它有一種形式,在表單內部有7個文本字段,3個選擇日期字段(與該頁面完全相同),上傳字段上傳圖像,帶有兩個字段和3個按鈕的radioButton。
其中一個按鈕用於驗證暱稱和電子郵件字段(如果暱稱或郵件已被佔用,則返回false,否則返回true,這是在servlet中完成的,因爲我們試圖將邏輯從演示文稿中分離出來) 。
第二個按鈕用於上傳圖像。
第三個按鈕用於發送所有表單(所有文本字段和日期)。
前兩個按鈕必須去servlet和回來的JSP ...
示例代碼:
(JSP)

<form action="altaPerfilServlet" 
     name = "frmValidar" 
     method='post' enctype='multipart/form-data' > 

    Nick: 
    <br /> 
    <input type="text" name="nick" 
      id="nick" onkeypress="deshabilita()" 
      value="${requestScope.nick}" /> 

<input type=button name="botonValidar" 
      id="botonValidar" value="Validar datos" 
      onclick="validarNick()" /> 
<!--Note: the javascript validarNick() verifies the nick field and if it is --> 
<!--not empty then it calls frmValidar.submit()--> 


(Servlet的)

FileItemFactory factory = new DiskFileItemFactory(); 
    ServletFileUpload upload = new ServletFileUpload(factory); 

    List<FileItem> fields = upload.parseRequest(request); 
    Iterator<FileItem> it = fields.iterator(); 

    <!--here i process all the FileItems and obtain their values--> 
    <!--then i talk to a java app (which acts as a server, providing --> 
    <!--the data and a series of classes) and obtain a boolean value(esValido)--> 
    <!--that tells me if the nick is available(true) or taken(false)--> 

    <!--finally: --> 

    request.setAttribute("esValido", esValido);<!-- saving the boolean --> 

    String nick=request.getParameter("nick"); 
    request.setAttribute("nick", nick); 
    RequestDispatcher rd = request.getRequestDispatcher("/altaPerfil.jsp"); 
    rd.forward(request, response); 
+0

告訴我們,呈現形式JSP代碼。除非你正在設置輸入值,或者使用表單框架/庫,否則這些字段不會神奇地重新填充。 –

+0

對不起,但我不明白你想要什麼,術語「渲染」令我感到困惑(我不太會說英語,對不起)。 如果你想要表單中的代碼,那將是不可能的,因爲它近似地是200行。 – Simpson

+0

向我們展示一個在JSP中表單顯示的小例子。 –

回答

1

request中讀取<input>數據doPost方法並將數據推送/綁定到請求範圍。

sample.jsp


<form method="post" action="servlet_url"> 
    No : <input type="text" name="no" value="${requestScope.no}"/> 
    Name : <input type="text" name="name" value="${requestScope.name}"/> 
    <input type="submit"/> 
</form> 

和代碼doPost

String no=request.getParameter("no"); 
String name=request.getParameter("name"); 

//other statements 

request.setAttribute("no",no); 
request.setAttribute("name",name); 

RequestDispatcher rd = request.getRequestDispatcher("/sample.jsp"); 
rd.forward(request, response); 
+0

我在我的問題中添加了一些代碼,也許現在更清晰。 關於你的答案:在你的代碼中,字段nick沒有任何反應,當我從servlet返回時,這個字段是空的。無論如何,它是好奇的,如果我使用我的例子(稱爲esValido)布爾值而不是字符串尼克做同樣的事情,那麼當我從servlet回來的文本字段尼克有值true或false(取決於布爾值)。所以,它顯然是工作,但只與我的布爾屬性,而不是與我的字符串屬性... – Simpson

+0

所以,基本上:你的技巧只適用於一個布爾值(我可以重新填充我的文本字段帶入來自servlet的請求的布爾值),但它不適用於字符串...當我嘗試使用字符串沒有任何反應,當我從servlet回來時,文本字段爲空... – Simpson

+0

現在工作,問題是我使用request.getAttribute()爲暱稱,它不起作用(不知道爲什麼)。 感謝您的提示! – Simpson