Регистрация  |  Вход

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

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

[i]<apex:outputPanel id="theResult" rendered="{!TheLeads!=null}" >      
<apex:pageBlockTable value="{!TheLeads}" var="MyLead" title="Results" id="theSearchResult">  
<apex:column headerValue="#">[/i] 
<apex:commandButton onclick="if(!confirm('WARNING: will Delete {!MyLead.Name} {!MyLead.Phone} {!MyLead.Email} from database!')){return};" value="Delete" action="{!DeleteD}" title="WARNING: irreversible"[b]reRender="theResult,UpBlock"[/b] > 
<apex:param value="{!MyLead.Id}" name="TheId" assignTo="{!TheId}" /> 
</apex:commandButton> 
[i]</apex:column>[/i]


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

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

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

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

Почитай здесь [url=https://developer.salesforce.com/forums?id=906F000000096wlIAA]Passing Values to Apex using Buttons inside Repeat Loops?[/url] Может найдешь ответ.

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

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. Ну или использовать ререндер и не париться почему.

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

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. Ну или использовать ререндер и не париться почему.