我有:
<apex:commandButton action="{!whatever}" value="myButton" reRender="sectionX" />
和
public String whatever(){
return 'ok';
}
它不起作用(返回401 Unauthorized),但如果我写:
public void whatever(){
// some code
}
工作正常。
问题是:如何向此调用返回某些内容(JSON或Page)?
由于
答案 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。