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

命令按钮用于在服务器上执行一些代码,它们返回一个 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;
    }
}

视觉力量

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

每次单击myButton命令按钮时,输出面板都会显示一个新的日期时间字符串。

事后思考:如果您想将字符串结果/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>

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

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

Not realy. Look here As for me, I used method which returns PageReference variable.

Better to do like this:

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;
}

About returning page - look here.

于 2012-10-09T20:05:50.460 回答