0

私は持っています:

<apex:commandButton action="{!whatever}" value="myButton" reRender="sectionX" />

public String whatever(){
    return 'ok';
}

それは機能しません(401 Unauthorizedを返します)が、私が書いた場合:

public void whatever(){
    // some code
}

正常に動作します。

問題は、この呼び出しに何か(JSONまたはページ)を返すにはどうすればよいですか?

ありがとう

4

2 に答える 2

2

CommandButtonは、サーバー上でコードを実行するために使用され、string/json値ではなくPageReferenceを返します。

<apex:commandButton action="{!whatever}" value="myButton" reRender="sectionX" />

したがって、メソッドwhateverは作業を実行してから、結果をコントローラーのパブリックプロパティに割り当てて、ページに結果を表示できるようにする必要があります。rerender属性は、出力パネルのデータをリロードすることを示していますsectionX。SectionXは、コマンドボタンアクションから表示する結果を囲む必要があります。

public class myController {
    public string Result {get;set;}

    public PageReference whatever() {
        // do your work here
        Result = DateTime.Now();
        return null;
    }
}

Visualforce

<apex:outputpanel id="sectionX">{!Result}</apex:outputpanel>

コマンドボタンをクリックするたびmyButtonに、出力パネルに新しい日時文字列が表示されます。

後付け:文字列のresult / JSONをjavascriptメソッドに入れたい場合は、次のようにすることができます。

<script>    
    function processJSON(val) {
    var res = JSON.parse(val);
    // do your work here
    }
</script>

<apex:outputpanel id="sectionX">
<script>
 processJSON("{!Result}");
</script>
</apex:outputpanel>

サンプルのコマンドボタンコードでは、再レンダリングを使用したため、null以外のPageReferenceを返す必要はありません。一方、コマンドボタンをクリックしたときに別のページに移動する場合は、再レンダリング属性を設定せず、null以外のPageReferenceを返す必要があります。

public PageReference whatever() {
    return Page.MyVisualforcePage;
}
于 2012-10-10T01:23:33.690 に答える
1

そうでもないです。ここを見てください 私はPageReference変数を返すメソッドを使用しました。

このようにする方が良いです:

public PageReference whatever(){
    PageReference pageRef = null; // null won't refresh page at all if I'm not mistaken
    // some cool logic goes here
    if(toNavigate) {
      pageRef = new PageReference('here is some URL to which user must be navigated');
    } else if(toRefreshCurrent) {
      pageRef = ApexPages.currentPage();
    }

    return pageRef;
}

戻るページについて-こちらをご覧ください。

于 2012-10-09T20:05:50.460 に答える