Иметь командную кнопку как часть выходного текста - PullRequest
1 голос
/ 15 февраля 2012

У меня есть объекты класса оболочки в списке, и на своей странице Vf я проверяю, содержит ли объект оболочки значение null, если он имеет значение 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>   

РЕДАКТИРОВАТЬ: Прежде чем я прочитал ответы от mmmix и LaceySnr, я реализовал их с использованием классов CSS. не уверен, что это лучший способ. Но теперь проблема заключается в том, что значение параметра не отображается в методе контроллера.

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

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Не уверен, что я понимаю, что такое кнопка, но у вас также есть альтернативный способ сделать! IF, например:

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

Если для кнопки вы думаете о вставке команд apex: вПовторитель и привязать обработчик событий к определенной строке, что можно сделать с помощью параметров

. Например, я использовал это для создания ссылки на команду в каждой строке таблицы:

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

Затем в обработчике событияВы можете извлечь параметр из параметров страницы, например, ApexPages.CurrentPage().getParameters().get('activeService')

Кроме того, если вы хотите иметь текстовый / рендеринг if / then / else внутри тега td, вы можете использовать этот

<td>
    <apex:outputText .... rendered="{!condition"} />
    <apex:commandButton .... rendered="{!NOT(condition)"} />
</td>
1 голос
/ 15 февраля 2012

Я бы предложил просто использовать другой механизм для управления условным рендерингом. <apex:variable> хорошо работает для этого, несмотря на то, что он специально не предназначен для этой цели, например, вы можете изменить:

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

до:

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

Очевидно, что в этом случае генерируется больше кода, но, глядя на остальную часть этого, я думаю, что вы могли бы (с учетом контекста) еще больше упростить это, чтобы использовать только пару из этих тегов и меньше атрибутов rendered.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...