2012-10-15 49 views
0

我正在使用JSF 2.0和iText從XHTML創建PDF。該頁面是簡單的註冊表單。當用戶輸入頁面中的所有數據並單擊提交時,我必須使用用戶輸入的值將整個HTML頁面源代碼放入bean中。我用Jsoup來獲取HTML,但我只有HTML源,而不是用戶輸入的值。我該如何做?獲取當前XHTML頁面的URL,該頁面將用戶數據填入JSF託管bean中

我當前的代碼是

 FacesContext facesContext = FacesContext.getCurrentInstance(); 
     ExternalContext externalContext = facesContext.getExternalContext(); 
     HttpSession session = (HttpSession) externalContext.getSession(true); 
     String url = "http://localhost:8080/Pro/faces/part1.xhtml;JSESSIONID=" + session.getId(); 
     try { 
     Document doc = Jsoup.connect(url).get(); 

回答

2

如果託管bean保持與視圖關聯的模型數據被存儲在會話範圍你Jsoup做法只會工作。 Jsoup正在發射一個全新的HTTP GET請求,這意味着它將在請求或視圖範圍bean獲得一個全新且完全不同的實例,並將所有屬性設置爲默認值。

如果您想讓bean保持在請求或視圖範圍內(非常合理),那麼您需要暫時將模型數據放入Jsoup調用之前的會話中,並在Jsoup調用之後將其刪除。

你的另一個錯誤是你上傳了JSESSIONID URL路徑片段。它區分大小寫,實際上應該全部小寫:jsessionid

因此,所有的一切,如果你想保持你的bean的請求或鑑於此應該做的作用域:

@ManagedBean 
@ViewScoped 
public class Bean { 

    @ManagedProperty("#{beanModel}") // Must match (unique!) session attribute name. 
    private Model model; 

    public void submit() throws IOException { 
     ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
     HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); 
     HttpSession session = (HttpSession) externalContext.getSession(true); 
     String url = request.getRequestURL().append(";jsessionid=").append(session.getId()).toString(); 

     session.setAttribute("beanModel", model); 
     Document doc = Jsoup.connect(url).get(); 
     session.removeAttribute("beanModel"); 

     // ... 
    } 

}