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
Kouichi HashimotoKouichi Hashimoto 

setRedirect(false)かつActionFunctionでの画面遷移


Apex+VisualForceで、オブジェクトの値によって、表示されるページを変えたいと考えています。
判別用のpage_baseを作り、そこからsetRedirect(false)なアクションメソッドで画面遷移しようとしたのですが、
このメソッドをActionFunctionでpage_baseから呼んでも画面が遷移せず、はまってしまいました。

setRedirect(true)なら動くのですが、これだとブラウザの戻るボタンが機能しないため、出来れば避けたいと思っています。

なにか他の方法をご存知の方はいらっしゃらないでしょうか?


念のため、動作しないサンプルを載せておきます。

 

<!-- page_base.page -->
<apex:page standardController="Account" extensions="test" showHeader="false" sidebar="false">
  <apex:form ><apex:actionFunction action="{!Redirect}" name="actionRedirect" rerender="dummy" /></apex:form>
  <script type="text/javascript">actionRedirect();</script>
</apex:page>

<!-- pageFirst.page -->
<apex:page standardController="Account" extensions="test" showHeader="false" sidebar="false">
  <H1>PAGE_FIRST</h1>
</apex:page>

<!-- pageSecond.page -->
<apex:page standardController="Account" extensions="test" showHeader="false" sidebar="false">
  <H1>PAGE_SECOND</h1>
</apex:page>

//test.cls
public with sharing class test {
  public test(ApexPages.StandardController controller){ }
  public PageReference Redirect(){
    if(判定)    return first();
    else    return second();
  }
  public PageReference first(){
    PageReference next = Page.pageFirst;
    next.setRedirect(false);
    return next;
  }
  public PageReference second(){
    PageReference next = Page.pageSecond;
    next.setRedirect(false);
    return next;
  }
}

 

 

Best Answer chosen by Admin (Salesforce Developers) 
aki124aki124

戻るボタンが機能しないという部分はよく理解していないのですが、page_base.pageの「rerender="dummy"」を削除するだけではダメでしょうか?

提示されたサンプルを、私の環境で動かしてみたところ、rerenderを外すだけで遷移しました。

 

あと、戻るボタンが機能する・しないの話が、

「pageFirstやpageSecondから別のページに遷移した後に、戻るボタンで戻ってきたときに、

 test.clsの判定をもう一度行い、表示するページを切り替える。

 (結果が前回と異なっていた場合には、前回と異なるページを表示する)」

という内容であれば、これも満たせていると思いますが、いかがでしょうか?

All Answers

aki124aki124

戻るボタンが機能しないという部分はよく理解していないのですが、page_base.pageの「rerender="dummy"」を削除するだけではダメでしょうか?

提示されたサンプルを、私の環境で動かしてみたところ、rerenderを外すだけで遷移しました。

 

あと、戻るボタンが機能する・しないの話が、

「pageFirstやpageSecondから別のページに遷移した後に、戻るボタンで戻ってきたときに、

 test.clsの判定をもう一度行い、表示するページを切り替える。

 (結果が前回と異なっていた場合には、前回と異なるページを表示する)」

という内容であれば、これも満たせていると思いますが、いかがでしょうか?

This was selected as the best answer
Kouichi HashimotoKouichi Hashimoto

 

お世話になります。

 

すみません、確認ミスでした。

ActionFunctionはreRender属性が空でもついていないと動作しないバグがあるという情報をどこかで見た記憶があったのですが、今確認したところ問題なく動いていました。

バグが修正されたということなんでしょうか?

 

戻るボタンの話は、setRedirect(true)であるとブラウザが判定用ページに遷移した記録を持ってしまうため、

戻るを一度押しても、また判定後のページに遷移してしまう、という意味で機能しないという話でしたが、

これもサンプルでreRender属性を消せば問題ありませんでした。

 

ありがとうございました。