VisualForce: параметр, передаваемый контроллеру как null

#salesforce #visualforce #apex

#salesforce #visualforce #вершина

Вопрос:

По какой-то причине идентификатор selectedRow продолжает отображаться как null при попытке удалить строку, не могу понять, почему. У меня есть таблица, встроенная в мою страницу, и я хочу добавить командную ссылку для удаления определенной строки. При попытке его удаления он продолжает отображаться как null.

Моя страница:

 <apex:outputPanel id="main">
<table>
<tr>
 <apex:repeat value="{!headers}" var="h">
  <td class="hdr">{!h}</td>
 </apex:repeat>
</tr>
<apex:repeat value="{!hours}" var="a">
 <tr>

 <td><apex:commandLink action="{!RowDelete}" value="delete" id="deleterow"/> 
 <apex:param assignto="{!SelectedRow}" value="{!a.id}" name="{!a.id}" />
 </td>


  <td ><apex:inputField value="{!a.Project__c}" /></td>
  <td><apex:inputField value="{!a.Date__c}" /></td>
  <td><apex:inputField value="{!a.StartTime__c}" /></td>
  <td><apex:inputField value="{!a.EndTime__c}" /></td>
  <td><apex:inputField value="{!a.Comments__c}" style="width:300px"/></td>

 </tr>
</apex:repeat>
</table>
 

Мой контроллер:

 // class variables

id  MonthlyReport;
public string SelectedRow {get;set{SelectedRow=value;system.debug('TESTING SelectedRow   Value is ' SelectedRow );}}
Reported_Hour__c[] hoursl; 


// To Delete Row
public pagereference RowDelete() {

 system.debug('TESTING: SelectedRow value is ' SelectedRow);
 Reported_Hour__c rh = [select id from Reported_Hour__c where id =: this.SelectedRow];
 delete rh;
 return null;

}
 

Ответ №1:

Я думаю, вы могли бы сбросить name бит из

 <apex:param assignto="{!SelectedRow}" value="{!a.id}" name="{!a.id}" />
 

или, может быть, введите там что-то нерелевантное ( selectedRowParam например). В этом отношении VF немного причудлив.

Проверьте http://bobbuzzard.blogspot.co.uk/2011/07/passing-parameters-to-apex-method-from.html для какого-то вдохновения?

Комментарии:

1. Спасибо. Я перепробовал все эти параметры, а также сделал то, что указано в ссылке, но все равно не смог решить эту проблему.

2. Используйте консоль JS в вашем любимом браузере, чтобы проверить, что указано в параметрах запроса при нажатии на вашу ссылку. Если он передается, например, в URL-адресе — проверьте имя параметра, может быть, вы сможете атаковать его с помощью ApexPages.currentPage().getParameters().get('selectedRowparam'); ?