0

私はJSF2.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();
4

1 に答える 1

2

Jsoupアプローチは、ビューに関連付けられたモデルデータを保持するマネージドBeanがセッションスコープに格納されている場合にのみ機能します。Jsoupは、つまり、新しいHTTP GETリクエストを起動します。つまり、リクエストまたはビュースコープのBeanの場合、すべてのプロパティがデフォルトに設定された、まったく新しい完全に異なるインスタンスを取得します。

Beanをリクエストスコープまたはビュースコープに保持する場合(非常に合理的)、Jsoup呼び出しの前にモデルデータをセッションに一時的に配置し、Jsoup呼び出しの後に削除する必要があります。

もう1つの間違いは、JSESSIONIDURLパスフラグメントを大文字にしたことです。大文字と小文字が区別され、実際にはすべて小文字にする必要があります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");

        // ...
    }

}
于 2012-10-16T19:02:20.337 に答える