function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
TShinchiTShinchi 

apex:commandButtonのクリックで別ウィンドウを開く

Visualforceでapex:commandButtonタグを配置して、これを押下(クリック)した際に、

新規ウィンドウを開いて、新規ウィンドウ側に処理結果を描画する方法はないでしょうか。

 

現在は

 

 

<apex:commandButton action="{!printResult}" value="検索実行"/>

 

 

のようにして、ボタン押下で、printResultメソッドが実行され、結果が同一ウィンドウに表示されますが、

これを新規のウィンドウの中に出力したいです。

n-hayashin-hayashi

<apex:form target="_blank">
  <apex:commandButton action="{!printResult}" value="検索実行"/>
</apex:form>

 

のように、apex:formタグのtarget指定で可能です。

TShinchiTShinchi

ありがとうございます。

できました:smileyhappy:

TShinchiTShinchi

本件、検索条件に不備があった場合は、commandButtonを押しても、別ウィンドウを開かず、

エラーメッセージを元の画面に表示したいのですが、どのような方法があるでしょうか。

 

<apex:form target="_blank">

 の場合、エラーがあった場合でも新規ウィンドウを開いて検索結果を描画してしまうので、困っています。

commandButtonに任意のJavaScriptを紐付けて、条件に問題がなかったらSubmit、問題があったら何もしないというようなことができないかと考えましたが、そのような方法はあるでしょうか。

 

 

Taiki YoshikawaTaiki Yoshikawa

CommandButtonからonClickイベントでjavascriptを呼び出すことができます。

apex:actionFunctionでJavascriptからApexクラスの呼び出しも可能です。

n-hayashin-hayashi

エラーチェックにデータの存在確認などが必要でサーバ側で行う必要があれば、以下のような処理の流れになります。

  1. apex:actionSupportで非同期処理のアクションを呼び出し、サーバ側で入力チェックを実施する。
  2. 処理結果によって特定のコンポーネントの表示/非表示を切り換える。
  3. エラー無しの場合に表示されるコンポーネントが表示された場合、コンポーネント内に記述されたJavascriptでapex:actionFunctionのアクション呼び出し、別ウィンドウに結果表示する。(画面にapex:formが1つの場合は、このJavascriptでtargetを書き換える必要もあります)
hiroji1020hiroji1020

すみません。よろしかったらコードの例など教えてもらえないでしょうか?

Taiki YoshikawaTaiki Yoshikawa

お疲れ様です。

 

CommandButtonをクリック時にJavaScriptでエラー判定を行う処理の例でしたらこんな感じでどうでしょうか。

 

Page

<apex:page Controller="SampleController">
	<apex:form id="formId" target="_blank">
		<!-- パラメータなし -->
    	<apex:actionFunction name="actionFunction1" action="{!doClick}" rerender="formId">
    		<apex:param name="parameter" value=""/>
    	</apex:actionFunction>
    	<!-- パラメータあり -->
    	<apex:actionFunction name="actionFunction2" action="{!doClick}" rerender="formId">
    		<apex:param name="parameter" value=""/>
    	</apex:actionFunction>
        <apex:pageBlock >
            <apex:commandButton value="actionFunctionから実行①" onClick="return btnClick1();" />
            &nbsp;&nbsp;
            <apex:commandButton value="actionFunctionから実行②" onClick="return btnClick2('javascriptから引数を受け取りました。');"  />
        </apex:pageBlock>
        <apex:pageMessages />
    </apex:form>
    <script>
    	// パラメータなし
	    function btnClick1() {
	    
	    	var check = 'OK';
	    	
	    	if (check == 'OK') {
	    		alert(check);
	    		actionFunction1();
	        } else {
	        	alert('NG');
	        }
	            
	        return false;
	    }
	    
	    // パラメータあり
	    function btnClick2(prm) {
	    
	    	var check = 'OK';
	    	
	    	if (check == 'OK') {
		    	alert('引数:' + prm);
		        actionFunction2(prm);
	        } else {
	        	alert('NG');
	        }
	        
	        return false;
	    }
	</script>
</apex:page>

 

Controller

public with sharing class SampleController {
	
	/*
	 * コンストラクタ
	 */
	public SampleController() {
		
	}
	
	/*
	 * action処理
	 */
	public void doClick() {
        String parameter = System.currentPageReference().getParameters().get('parameter');
        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, parameter));
    }
}

 

hiroji1020hiroji1020

ご丁寧に教えていただきありがとうございました。早速やってみます。また、わからないときは聞くかもしれませんが、その時も教えていただけると大変助かります。

ありがとうございました

hiroji1020hiroji1020

もう1つ教えてください。

別WindowでのOpenはうまくいったのですが、登録画面をPOP-UP(別Windowではなく)する事を実現したいと思っています。

これは簡単にできるのでしょうか?

 

何度もすみません。教えてください。

 

ありがとうございます。

Taiki YoshikawaTaiki Yoshikawa

別画面をPopupで表示する場合は、Javascriptで対応する必要があると思います。

window.openなどで対応する方法はどうでしょうか。

hiroji1020hiroji1020

ありがとうございます。早速やってみます

hiroji1020hiroji1020
$B$"$j$,$H$&$4$6$$$^$9!#(B $BJV?.$,$*$/$l$F$9$_$^$;$s$G$7$?!#$5$C$=$/(BTry$B$7$F$_$^$9(B