2012-10-05 21 views
8

Bugün bir HTML sayfasından bir POST almak ve ardından JSF sayfama yönlendirmek için bir sunucu uygulaması kullanıyorum.JSF POST parametrelerini almak için

Bu benim gerçek Servlet geçerli:

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 yayın sayfası:

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

benim JSF sayfasında (ManagedBean) doğrudan göndermek mümkün mü? Nasıl? Servlet yerine daha iyi bir şey koymak istiyorum.

cevap

18

Elbette yapabilirsin. Çoğu JSF isteği zaten POST s şeklindedir, bu nedenle POST isteğini işlemek için planladığınız JSF sayfasının yolunu kullanırsanız, parametreyi bu sayfa tarafından desteklenen yönetilen bir fasulye içinde alabilirsiniz. sayfa kendisi.

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

VEYA yönetilen fasulye içinde yönetilen fasulye örneği sonra

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

Eğer @PostConstruct ile açıklamalı ettik yöntem idam edilecek vardır: bir yönetilen fasulye içinde

. Yukarıdakiler yönetilen fasulyenin içine erişmenizi sağlar.

Eğer Bununla beraber ilk olarak sayfa içinde değerini gerekiyorsa, sayfanızda size bakış içinden parametre üzerinde doğrulamaları gerçekleştirebilir nasıl

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

Bildirimi (tercihen üstte) bu olabilir. Oldukça güzel bir özellik.

Sadece emin olun ve html formunuzu action özniteliğini JSF görünümünün yoluna ayarlayın.

+0

Bir viewParam üzerinde, ne gereklidir = "true" ne anlama geliyor? – Erick

+0

@Erick 'required =" true "' sağlanan parametrenin boş olmadığını garanti eder – kolossus