2012-02-15 6 views
1

私はリスト内のラッパークラスのオブジェクトを持っています。私のVfページでは、ラッパーのオブジェクトにnullが含まれているかどうかをチェックしています。それ以外は予定の詳細を表示します。出力テキストの一部としてコマンドボタンを持っています

「フリー」ではなく「アポイントメント」ボタンを作成したいと思います。

ボタンコードを挿入する正しい方法は何でしょうか?

<apex:repeat var="slot" value="{!liTimeSlots}"> 

<tr class="{!IF(ISNULL(slot.sAppointment), 'Free', 'Fill')}"> 
    <td ><apex:outputText value="{!slot.tstart1}"/></td> 

     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointment), 'Free', slot.sAppointment.name)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointment), '', slot.sAppointment.Appointment_Type__c)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointment), '', slot.sAppointment.Patient__c)}"/></td> 
     </tr> 
    <tr> 
    <td></td> 

     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointmentOverlap), ' ', slot.sAppointmentOverlap.name)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointmentOverlap), '', slot.sAppointmentOverlap.Appointment_Type__c)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointmentOverlap), '', slot.sAppointmentOverlap.Patient__c)}"/></td> 
     </tr> 

EDIT: 私はCSSクラスを使用して実装さmmmixとLaceySnrから回答を読む前に。これが最善の方法であるかどうかはわかりません。しかし今、問題はパラメータ値がコントローラーメソッドに現れないことです。

<apex:repeat var="slot" value="{!liTimeSlots}"> 

<tr class="{!IF(ISNULL(slot.sAppointment), 'Free', 'Fill')}"> 
    <td ><apex:outputText value="{!slot.tstart1}"/></td> 

     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointment), 'Free', slot.sAppointment.name)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointment), '', slot.sAppointment.Appointment_Type__c)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointment), '', slot.sAppointment.Patient__c)}"/></td> 
     <td><div Class="{!IF(ISNULL(slot.sAppointment), 'ShowButton', 'HideButton')}"> 
     <apex:commandButton action="{!Book}" Value="Book"> 
     <apex:param name="Timev" value="{!slot.tstart1}"/></apex:commandButton></div></td> 
     </tr> 
    <tr> 
    <td></td> 

     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointmentOverlap), ' ', slot.sAppointmentOverlap.name)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointmentOverlap), '', slot.sAppointmentOverlap.Appointment_Type__c)}"/></td> 
     <td><apex:outputText value="{!IF(ISNULL(slot.sAppointmentOverlap), '', slot.sAppointmentOverlap.Patient__c)}"/></td> 
     </tr> 

public PageReference Book() 
{ 
String Timeval=ApexPages.CurrentPage().getParameters().get('Timev'); 
system.debug('timeval +++++++++++++++'+Timeval) ;// This is returning null 
pr=Page.Appointment; 
pr.setRedirect(true); 
pr.getParameters().put('App_start',Timeval); 
pr.getParameters().put('App_start_Date',string.valueof(Appointment.Start_Date__c)); 

return pr; 
} 

答えて

1

ない私はボタンについての事を理解し、しかし、あなたはまた、例えば、IF行うための別の方法を持っていることを確認!

<apex:outputText value="{!field}" rendered="{!condition"} /> 

あなたが頂点を挿入することを考えているボタンの場合:コマンドリピーターへ例えばパラメータ

介して行うことができ、特定の行にイベントハンドラを結ぶIはクレタにすべての表の行にcomamndリンクこれを使用:

<apex:column headerValue="Action"> 
    <apex:commandLink id="cmdDetachService" action="{!detachService}" value="Detach" rerender="mainBlock, errors" status="ajaxPostStatus" > 
     <apex:param value="{!item.id}" name="activeService" /> 
    </apex:commandLink> 
</apex:column> 

は、その後、イベントハンドラで、あなたは、TDタグ内のif/then /他のテキスト/ボタンのレンダリングしたい場合は、この

<td> 
    <apex:outputText .... rendered="{!condition"} /> 
    <apex:commandButton .... rendered="{!NOT(condition)"} /> 
</td> 
を使用することができ、また例えば、ページパラメータから ApexPages.CurrentPage().getParameters().get('activeService')

をパラメータを抽出することができます

+0

thanks mmix ..しかし、このソリューションはすべての行をコマンドリンクにします。 slot.sAppointmentがnullの場合にのみ表示する場合。私もコマンドボタンにparamを追加しようとしました。しかし、私はコントローラのparam値を取得することができません..そのnullを返します。質問が更新されました。 – Prady

+0

申し訳ありません。私はあなたが条件付き表示を得るためにレンダリングを使用することの意味を理解していました。先端のおかげで – Prady

+0

あなたはcommandButtonに 'rendered'属性も持っていますので、ボタンを隠すためにスタイルを使う必要はありません。 – mmix

1

私は条件付きレンダリングを制御するための別のメカニズムを使用してお勧めしたいです。

<td><apex:outputText value="{!IF(ISNULL(slot.sAppointment), 'Free', slot.sAppointment.name)}"/></td> 

へ:<apex:variable>明示、この目的のために設計されていないにも関わらず、このためにうまく機能し、例えば、あなたが変更される可能性が明らかに、それはより多くのコードを生成します。この場合、

<apex:variable var="v" value="" rendered="{!IF(ISNULL(slot.sAppointment), true, false)}"> 
    <td><apex:commandButton action="{!someAction} value="Do This!"/></td> 
</apex:variable> 
<apex:variable var="v" value="" rendered="{!IF(ISNULL(slot.sAppointment), false, true)}"> 
    <td><apex:outputText value="{!slot.sAppointment.name}"/></td> 
</apex:variable> 

が、見てこれの残りの部分では、これらのタグを2つだけ使用し、より少ない数のrendered属性を使用するために、これをさらに煮沸することができると思います。

+0

うわー..これはきちんとしている...私は、CSSを使用する必要があったのと同様の結果を得た。この方法やCSSを使用することをお勧めしますか?私の推測では、これはレンダリング中に高速になります..処理にはわからない – Prady

+1

cssを使用して頂点を非表示にしないでください。あなたは入力フィールドが隠れている場合、それを妥当性チェックから削除しません。 – mmix

+1

@ mmixによれば、できるだけCSS/Javascriptを使わないでください。このようにすると、ビューステートで移送する必要があるすべてのものが表示されます。 –

関連する問題