Невозможно передать параметр <apex: param> в соответствующий метод

Предположим, у меня есть код страницы:

       <apex:pageBlockTable value="{!allContacts}" var="c" >
            <apex:column value="{!c.id}" headervalue="ID"/>
            <apex:column value="{!c.FirstName}" headervalue="First Name"/>
            <apex:column value="{!c.LastName}" headervalue="Last Name"/>
            <apex:column value="{!c.Title}" headervalue="Title"/>
            <apex:column value="{!c.Company}" headervalue="Company"/>
            <apex:column>
                <apex:commandButton action="{!addToRecruits}" value="Recruit">
                    <apex:param assignTo="{!leadID}" name="leadID" value="{!c.id}"/>
                </apex:commandButton>
            </apex:column>
        </apex:pageBlockTable>

И соответствующий контроллер:

    public String leadID { get; set; }

    public PageReference addToRecruits() {
        System.debug('LeadID is: ' + leadID);
        List<Lead> potentialCandidate = [SELECT id, FirstName, lastName, Title, Company FROM Lead WHERE id = :leadID];   
        delete potentialCandidate;

        return null;
    }

Кажется, я не могу пройти leadID в addToRecruits() метод. У вас есть идеи, почему так?

ОБНОВИТЬ:

Я мог бы решить это. Вместо того, чтобы запрашивать с помощью SOQL, я подошел с этим стилем:

public String leadID { get; set; }
public PageReference addToRecruits() {

    Lead candidate=new Lead(id=leadID);
    ....
}

3 ответа

Похоже на печально известную ошибку платформы? где значения apex:param не всегда отправляются в контроллер с помощью apex:commandButton (хотя они отправляются с помощью apex:commandLink).

Простой обзор проблемы и возможные обходные пути приведены Джеффом Дугласом здесь: http://blog.jeffdouglas.com/2010/03/04/passing-parameters-with-a-commandbutton/

Есть один способ передать параметр в контроллер, но он также использует commandLink. Я имею в виду, мы должны использовать

  • командная ссылка и командная кнопка

Например:

<apex:commandLink action="{!applyNow}" id="applybuttonLink" style="text-decoration:none">
<apex:commandButton value="Apply now"/>
<apex:param name="passId" assignTo="{!passId}" value="{!Vac.id}"/>
</apex:commandLink>

контроллер:

public String vacancyId{get;set;} 

Добавьте атрибут "rerender" в apex:commandButton, и он начнет работать - что-то вроде <apex:commandButton rerender="myForm" action="{!addToRecruits}" value="Recruit">

Другие вопросы по тегам