2012-10-05 51 views
8

今天我用一個servlet接收來自一個HTML頁面中的POST,然後重定向到我的JSF頁面。JSF接收POST參數

這是我實際的Servlet:

public class CommInServlet extends HttpServlet { 

    private String reportKey; 

     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     req.getSession(true).setAttribute("reportKey", req.getParameter("reportkey")); 
     req.getRequestDispatcher("main.xhtml").forward(req, resp); 
     } 

    } 

HTML頁面後:

<html> 
<head /> 
<body> 
<form action="Filtro" method="post"> 
<input type="text" size="120" name="reportkey" value="XXXXXXXXXXXX" /> 
<input type="submit" value="doPost" /> 
</form> 
</body> 
</html> 

是否有可能直接張貼到我的JSF頁面(ManagedBean)?怎麼樣? 我想更換一些...更好的Servlet。

回答

18

當然可以。大多數JSF請求是POST小號無論如何,因此,如果您使用的路徑,你打算處理POST請求JSF頁面,則可以得到由該頁面支持的管理bean中的參數或獲取內的參數頁面本身。

在一個託管bean:

 @PostConstruct 
     public void initMyBean(){ 
     /**This map contains all the params you submitted from the html form */ 
     Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
     requestParams.get("reportKey"); 
         } 

管理bean內有

 @ManagedProperty(value="#{param.reportKey}") 
    String reportKey; 
    //getter and setter of course! 

管理bean實例化後,你已經與@PostConstruct註釋的方法將被執行。以上將讓你在你的託管bean中進行訪問。

如果你需要你的第一頁然而內的值,你可以在頁面中(最好是在頂部)

 <f:metadata> 
     <f:viewParam name="reportKey" value="#{backingBean.reportKey}" required="true"/> 
    </f:metadata> 

注意如何能上的參數從您的視圖中進行驗證都沒有了。非常酷的功能。

只要確保並設置HTML表單action屬性的JSF視圖的路徑。

+0

在一個viewParam,有什麼需要=「真」是什麼意思? – Erick

+0

@Erick'required =「true」'確保提供的參數不爲空 – kolossus