【问题标题】:Get the URL of current XHTML page which has user data filled in the form into the JSF Managed bean获取当前 XHTML 页面的 URL,该页面在 JSF Managed bean 中填写了表单中的用户数据
【发布时间】:2012-10-05 23:29:35
【问题描述】:

我正在使用 JSF 2.0 和 iText 从 XHTML 创建 PDF。该页面是简单的注册表单。当用户在页面中输入所有数据并单击提交时,我必须将用户输入值的整个 HTML 页面源获取到 bean 中。我使用 Jsoup 来获取 HTML,但我只得到 HTML 源而不是用户输入的值。我该怎么做?

我当前的代码是

        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();

【问题讨论】:

    标签: url session jsf-2 itext


    【解决方案1】:

    只有当持有与视图关联的模型数据的托管 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");
    
            // ...
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2013-12-22
      • 2013-04-17
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多