0

ボタンクリックで2つの操作を実行する必要があります。

  1. URLを返すBeanのメソッドを呼び出し、それをいくつかの変数に設定します。

  2. その後、別のタブでそのURLを開く必要があります。CommandButtonのaction属性を使用していて、URL値を正しく設定していますが、新しいタブでそのURLをpdfとして開くにはどうすればよいですか。つまり、「PDFのURLは新しいタブで開く必要があります」

次のようにサンプルをコーディングします。

<div class="form-options">
    <h:commandButton value="Download Report" styleClass="btn btn-primary btn-icon buttonCustom" actionListener="#{reportBean.GenerateReport}">
    </h:commandButton>
</div>  
4

3 に答える 3

2

commandButtonの代わりにcommandLinkを使用します。commandLinkを使用する場合は、新しいウィンドウとしてターゲット属性の値を指定する必要があります。

<h:commandLink target="new window">

残りのすべてのコードは、要件に応じたものになります。レポートが存在するURLは変数の1つにすでに存在するため、commandLinkのBeanからこの変数を使用してURLを提供できます。

それ以外の場合は、iframeを使用することもできます。通常、同じページにレポートを表示するために使用されます...

于 2012-08-22T08:29:55.647 に答える
2

私があなたを正しく理解したことを願っています。これは私のために働いた:

  1. コマンドボタンのactionListener属性にレポートを生成するメソッドとURLを指定します(サンプルコードによると、すでに行ったこと)。
  2. commandButtonのaction-attributeでURLを返すメソッドを指定します(actionListener-methodの後に呼び出されます)。
  3. 新しいタブを開くにtarget="_blankは、親を追加します<h:form>この質問の回答から取得)

XHTMLコード:

<h:form target="_blank">
    <h:commandButton value="Show Report" 
                     actionListener="#{reportBean.generateReport}"
                     action="#{reportBean.getUrl}" />
</h:form>

このアプローチはtarget="_blank"すべての非ajax呼び出しに適用されるため、Javascriptを使用する別の方法を次に示します。

<h:form>
    <h:commandButton value="Show Report" 
                     actionListener="#{reportBean.generateReport}"
                     action="#{reportBean.getUrl}" 
                     onclick="this.form.target='_blank'"/>
</h:form>

Javaコード:

public void generateReport(final ActionEvent evt) {
    // ... generating report and setting url-variable
}


public String getUrl() {
    return url;
}

外部リンクに転送する必要がある場合は、この質問を参照してください

于 2012-08-22T08:29:59.420 に答える
2

私が理解しているように、あなたの問題はアクションの結果を新しいタブにリダイレクトすることではなく、代わりにレポートを表示したいです(私の推測が正しければ、JasperReportを使用していてPDF形式で表示したいです)。これを行うには、ファイルをクライアントコンピューターにダウンロードしてから、クライアントのデフォルトのエディター/プログラムにファイルを処理させる必要があります。

ファイルのダウンロードの詳細については説明しません。BalusCはこの問題に関する優れた情報を提供します。

ブラウザでPDF(またはその他の)ファイルを表示するための関連部分は、応答のContentTypeです。これは、ファイルがどのように脅かされなければならないかをブラウザに伝えます。一部のコンテンツタイプ値

私が間違っていて、ファイルを表示(ダウンロード)したくなくて、新しいウィンドウでファイルを開く必要がある場合は、2つの方法があります(@JanisKと@AngelsandDemonsの両方の回答を再開します)。

  • フォームのターゲットを「_blank」として設定しますが、この方法では、実行されたすべてのアクションによって新しいタブ/ウィンドウが開きます。

    <h:form target="_blank">
        <h:commandButton ... />
    </h:form>
    
  • commandButtonの代わりにcommandLinkを使用します。この場合、このリンク要求に対してのみター​​ゲットを設定できます。

    <h:form>
        <h:commandLink target="_blank" ... />
    </h:form>
    
于 2012-08-22T15:39:29.387 に答える