rerender

rerender

есть вот такой VF кусок и вот такой обработчик. Почему то поведение обработчика зависит от наличия блока Rerender в VF CommandButton. Если есть ререндер - обрабатывает правильно, если его нет (например хочу всю страницу перегрузить) то переменная TheID всегда == null. Кто нибудь может объяснить как это работает я не понимаю почему поведение функции зависит от того что я там ререндерю или нет.

<apex:outputPanel id="theResult" rendered="{!TheLeads!=null}" >
<apex:pageBlockTable value="{!TheLeads}" var="MyLead" title="Results" id="theSearchResult">
<apex:column headerValue="#">

<apex:commandButton onclick="if(!confirm('WARNING: will Delete {!MyLead.Name} {!MyLead.Phone} {!MyLead.Email} from database!')){return};" value="Delete" action="{!DeleteD}" title="WARNING: irreversible"reRender="theResult,UpBlock" >
<apex:param value="{!MyLead.Id}" name="TheId" assignTo="{!TheId}" />
</apex:commandButton>
</apex:column>

public void DeleteD() {
if (TheId==null) return; //можно поставить дебаг - без ререндера всегда NULL
..........
}

Помню, тоже сталкивался с такой проблемой как-то давно.
Не могу вспомнить как ее решал. Наверное просто оставлял rerender

Почитай здесь Passing Values to Apex using Buttons inside Repeat Loops? Может найдешь ответ.

походу это баг, ну или фича. Стандарт про который нужно знать. Вот этот ответ понравился, я думаю так и есть на самом деле.

The basic functionality of a command button is set all the values from the page to the controller.This will be a submit request. In that case you don't need to set the values using apex:param.Setters will be automatically get called.

Решается воркараундами типа сделать не apex:commandButton а аpex:commandLink и задать стиль как button. Ну или использовать ререндер и не париться почему.

Interesting information? Help us, post link to social media..