apex:commandButton什么都不能返回?

时间:2012-10-09 16:35:53

标签: salesforce apex-code visualforce

我有:

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

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

它不起作用(返回401 Unauthorized),但如果我写:

public void whatever(){
    // some code
}

工作正常。

问题是:如何向此调用返回某些内容(JSON或Page)?

由于

2 个答案:

答案 0 :(得分:2)

CommandButtons用于在服务器上执行某些代码,它们返回PageReference,而不是字符串/ json值。

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

因此方法whatever应该完成工作,然后将结果分配给控制器上的公共属性,以便页面可以显示结果。 rerender属性表示要在outputpanel 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命令按钮时,outputpanel都会显示一个新的日期时间字符串。

事后的想法:如果你想把一个字符串结果/ 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>

在您的示例命令按钮代码中,您使用了rerender,因此您不需要返回非null的PageReference。另一方面,如果要在单击命令按钮时转到另一个页面,则不会设置rerender属性,并且需要返回非null的PageReference, 即

public PageReference whatever() {
    return Page.MyVisualforcePage;
}

答案 1 :(得分:1)

不是真的。看here 至于我,我使用了返回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;
}

关于返回页面 - 查看here