2010-05-30 33 views
0

我想將值傳遞給servlet,但我保持空值。JSP doPost getAtribute空值

<jsp:useBean id="Helper" class="model.Registration" scope="request"/> 
<form action="/Project/Registration" method="post" enctype="multipart/form-data"> 
    <input type="text" size="20" name="name" value="<%=Helper.getName()%>"> 
    <input type="submit"> 
</form> 

protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
    Registrationh2 = (Registration) request.getAttribute("Helper"); 
    if(h2!=null){ 
     System. out.println(h2.getName()); 
    } 
    else 
     System. out.println("NULL");   
} 

我的代碼有什麼問題嗎?

回答

1

無論範圍如何,jsp:useBean工作,如果你使用multipart/form-data表格編碼。這種編碼是處理文件上傳所必需的,解析這種編碼的支持是而不是,它以如此透明的方式構建在JSP/Servlet中,使request.getParameter()和consorts能夠返回所需的值。然而,新的Servlet 3.0 API支持這種形式編碼,但是由於您需要使用request.getPart()來代替,所以這與jsp:useBean不兼容。

如您在之前發佈的相關問題中回答過幾次,您需要Apache Commons FileUpload來解析multipart/form-data請求。但是,您可以創建一個Filter,在multipart/form-data請求的情況下,它可以透明地解析並替換原始的request。您可以在這裏找到關於它的blog article,並附有代碼示例。

+0

嗨,很好的例子謝謝。 – user236501 2010-05-31 01:44:44

0

我假設你想從註冊模型傳遞名稱字符串。如果是這種情況,則需要使用以下代碼進行提取。

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

另外,請將enctype作爲多部分刪除。當您從客戶端上傳任何文件時使用它。

1

註冊對象的範圍是請求。所以它不會在這個新請求的servlet中可用。 您可以通過在會話中設置來獲取bean。或者,讓範圍進入會話。