2012-01-23 17 views
1

私はここで私のレンダリングされた議論に固執しています - 私はかなり私はレコード自体から値を引き出していると私はVisualforceのページからではないです。レコードから「いいえ」に値(are_you_kp__c)を変更すると、pageblocksectionがレンダリングされますが、なんらかの理由でレンダリングされません。なぜ誰が知っていますか?Salesforce(Visualforce):再入可能 - レコードではなくページから値を引き出しますか?

私はここにいくつかのコントローラの作業が必要だと思う - 更新

<apex:pageBlock title="New Bid" mode="maindetail" tabStyle="Proposal__c"> 
    <apex:messages/> 
    <apex:actionRegion> 
    <apex:pageBlockSection columns="2" title="Bid Information" collapsible="false" showHeader="true"> 
     <apex:inputField value="{!rfp.Bid_Amount__c}"/> 
     <apex:outputField value="{!rfp.Bid_Date__c}"/> 
     <apex:inputField value="{!rfp.Bid_Deliver_By__c}"/> 
     <apex:inputField value="{!rfp.Bid_Comments__c}"/> 
     <apex:pageBlockSectionItem> 
       <apex:outputLabel value="Are you the Key Appraiser?"/> 
       <apex:outputPanel>    
        <apex:inputField value="{!rfp.are_you_kp__c}" required="true"> 
         <apex:actionSupport status="StatusChange" event="onchange" rerender="PageErrors, appraiserInfo"/> 
         <apex:actionStatus startText="Updating page ..." id="StatusChange"/> 
        </apex:inputField> 
       </apex:outputPanel> 
     </apex:pageBlockSectionItem> 
    </apex:pageBlockSection> 
    </apex:actionRegion> 
    <apex:pageBlockSection title="Testing" columns="2" rendered="{!rfp.are_you_kp__c == 'No'}" id="appraiserInfo"> 
     <apex:pageBlockSectionItem> 
      <apex:outputLabel value="Single Point of Contact" for="spoc"/> 
       <apex:selectList id="spoc" value="{!rfp.SPOCL__c}" size="1" title="Single Point of Contact Select"> 
        <apex:selectOptions value="{!SPOCS}"></apex:selectOptions> 
       </apex:selectList> 
     </apex:pageBlockSectionItem> 
    </apex:pageBlockSection> 
</apex:pageBlock> 

...しかし、わからない、ここから行くするには - 正しいIDとoutputPanelの要素をレンダリングするために包ま:まだの問題を抱えていますinputFieldの変更の結果としてレンダリングされたブール値を切り替える - これをコントローラでどのように切り替えるのですか?私は、私は=入力フィールドの値かどうかを評価する必要があると思うし、それによって真にレンダリング設定 - 私はどのようにかかわらず、...

<apex:outputPanel id="appraiserInfo"> 
<apex:pageBlockSection title="Testing" columns="2" rendered="{!rfp.are_you_kp__c == 'No'}"> 
    <apex:pageBlockSectionItem> 
     <apex:outputLabel value="Single Point of Contact" for="spoc"/> 
      <apex:selectList id="spoc" value="{!rfp.SPOCL__c}" size="1" title="Single Point of Contact Select"> 
      <apex:selectOptions value="{!SPOCS}"></apex:selectOptions> 
      </apex:selectList> 
    </apex:pageBlockSectionItem> 
</apex:pageBlockSection></apex:outputPanel> 

さてさてもう一つの試みはわからない - それは動作します。この時間が、私はそれほど理由を得られません...それだけです。これは、(あなたがそれを見る方方法以下、または、)上記actionSupportにACTION =「{!updateAnswer}」

public pageReference updateAnswer(){ 
     if(this.p.are_you_kp__c == 'No') 
     rfp.are_you_kp__c = 'No'; 
     try{ 
     update rfp; 
      } 
     catch (DmlException ex){ 
      ApexPages.addMessages(ex); 
      return null; 
     } 
     return null; 
    } 

おそらく関連する制御コード

public ProposalExtension(ApexPages.StandardController pCon) { 
    this.p = (Proposal__c)pCon.getRecord(); 
} 

答えて

5

ラップ要素内を追加するだけです<apex:outputPanel>と表示したい要素ではなく、それを再描画します。問題は、要素がレンダリングされていないときにページ内にないため、再レンダリングの作業対象ではないということです。

それは多くの場合、人をキャッチ何か、私自身は含まれ - 私はここでそれについてのブログ記事を書いた:http://www.laceysnr.com/2011/10/using-rerender-to-render-one-solution.html

** EDIT **

あなたが持っていなかったことを前に発見しませんでしたあなたの<apex:actionSupport>タグで指定されたアクションこれを使用してコントローラ上のアクションを呼び出すことができます。

// controller 
public Pagereference UpdateAnswer() 
{ 
    // do some stuff if you want 
    return null 
} 

// page 
<apex:actionSupport action="{!UpdateAnswer}" status="StatusChange" event="onchange" rerender="PageErrors, appraiserInfo"/> 

希望に役立ちます:選択リストが希望の値に書き込んでいるので、(あなたがしたい場合を除き)、あなたが実際にあなただけのこの操作を行うことができ、コードで何もする必要はありません!

+0

私は問題があると思っていますが、私の問題は、ユーザーが選択したinputFieldのピックリスト値を評価できるactionSupportにaction = {!function}が必要だと思うし、THATを使用して、レンダリング "される。これを行うことができるコントローラーの拡張機能に何かを書き込む方法はありますか? are_you_kp__cは--None--、Yes、またはNoのピックリストです。もし彼らがNoと答えるなら...私はそのSPOCセクションをレンダリングする必要があります – tsalb

+0

アップデートをありがとう - しかし、私はまだユーザーの後に何も投稿していないので私のピックリストを切り替える - 私は少し周りを演奏し、何らかの理由で私はそこにコードを持っています。私はなぜか分かりません。 – tsalb

+1

''は、ピックリストが変更されたときにコントローラ上でアクションを発生させます。あなたは ''を使用していないので、 ''の中のすべてがコントローラに返され、関連するページ部分が最新の値で再描画されます。 –

関連する問題