Невозможно передать параметр <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">