0

Tomcat 7.0.25 で JSF 2.0/primefaces Web アプリを使用しています。アプリケーションには、primefacesショーケースのように、単純なファイル アップロード フォームがあります。

<h:form enctype="multipart/form-data">
    <p:messages showDetail="true" />
    <p:fileUpload value="#{fileUploadController.file}" mode="simple" />
    <p:commandButton value="Submit" ajax="false" actionListener="#{fileUploadController.upload}" />
</h:form>
public void upload() throws IOException {
    FacesMessage msg = new FacesMessage("Succesful", this.file.getFileName() + " is uploaded.");
    FacesContext.getCurrentInstance().addMessage(null, msg);
    // do stuff with xml
}

stndalone Java クライアントを使用してフォームをアップロードするための multipart/form-data POST リクエストを作成しようとしています。Sinc 今、私はこれこれを試しましたが、成功しませんでした。

どちらの場合もHTTP/1.1 200 OK、POST が送信されなかったかのように、応答を受け取り、フォーム ページを取得します。

何か案は?

4

1 に答える 1

0

プログラムでフォームを JSF Web アプリケーションに送信する場合は、次の 3 つの点を考慮する必要があります。

  • HTTP セッションを維持します (JSF Web アプリケーションでサーバー側の状態の保存がオンになっている場合)。
  • javax.faces.ViewState非表示の入力フィールドの名前と値のペアを送信します。
  • 仮想的に押される送信ボタンの名前と値のペアを送信します。

HTTP セッションの維持に関しては、 を使用する場合は、最初の作成のURLConnectionに次の行を追加します。URLConnection

CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

または、HttpClient を使用する場合は、次を使用します。

HttpContext httpContext = new BasicHttpContext();
httpContext.setAttribute(ClientContext.COOKIE_STORE, new BasicCookieStore());
// ...
HttpResponse getResponse = httpClient.execute(someHttpMethod, httpContext);

javax.faces.ViewStateJSF ビューステートを維持するには、隠し入力フィールドの name=value ペアの送信が必須です。JSF がアクションを呼び出せるようにするには、送信ボタンの name=value ペアの送信が必須です。自動生成されたクライアント ID がない場合はこれが最も簡単なので、クライアント ID とその親フォームに固定 ID を指定します。

以下も参照してください。

于 2012-05-25T19:42:18.047 に答える