2014-02-10 3 views
1

У меня есть страница visualforce, где я показываю в таблице список случаев, которые я получаю от своего класса Apex.Пропустить параметр from visualforce to apex Ошибка

Это мой Visualforce:

<apex:page controller="XMLCasePopupController" title="Search" showHeader="false" sideBar="false" tabStyle="Case" id="page" > 
<!-- messages --> 
<apex:outputPanel id="top" layout="block"> 
<apex:outputLabel value="Possible duplicates" style="margin:20px; padding:10px; margin-top:10px; font-weight:bold; font-size: 1.5em;"/> 
</apex:outputPanel> 

<apex:form > 
<apex:pageBlock title="XML Case Edit" id="XML_Case_Edit" mode="Edit"> 
    <!-- Buttons toolbar -->  
    <apex:pageBlockButtons > 
     <apex:commandButton value="Finish" action="{!endCaseCreation}"/> 
    <!-- <apex:commandButton value="Back" action="{!backStep}"/> --> 
    </apex:PageBlockButtons> 

    <apex:outputPanel id="page" layout="block" style="margin:5px;padding:10px;padding-top:2px;"> 
<apex:actionRegion > 
    <!-- results panel --> 
    <apex:outputPanel id="pnlSearchResults" style="margin:10px;height:350px;overflow-Y:auto;" layout="block"> 
     <apex:pageBlock id="searchResults"> 
     <apex:pageBlockTable value="{!results}" var="c" id="tblResults"> 
       <apex:column > 
       <apex:facet name="header"> 
        <apex:outputPanel >Release</apex:outputPanel> 
       </apex:facet> 
       <apex:outputLink onClick="test('{!c.Id}');return false;">{!c.Module_Release__c}</apex:outputLink> 
       </apex:column> 
</apex:column> 
     </apex:pageBlockTable> 
    </apex:pageBlock> 
    </apex:outputPanel> 
</apex:actionRegion> 
</apex:outputPanel> 
</apex:pageBlock> 
<apex:actionFunction name="test" action="{!ShowCaseToTrue}"> 
    <apex:param name="param1" assignto="{!IdChosen}" value=""/> 
</apex:actionFunction> 
</apex:form> 

Так я называю actionFunction ShowCaseToTrue, и я хочу передать идентификатор случая, когда пользователь нажал в таблице. Это мой класс apex:

public with sharing class XMLCasePopupController { 

    public List<Case> results{get;set;} // search results 
    public string searchString{get;set;} // search keyword 
    public string caseId{get;set;} 
    public Boolean ShowCase{get;set;} 
    public Case ChosenCase{get;set;} 
    public Id IdChosen{get;set;} 

    public XMLCasePopupController() { 
     // get the current search string 
     searchString = System.currentPageReference().getParameters().get('lksrch'); 
     caseId = System.currentPageReference().getParameters().get('id'); 
     //ShowCase=False; 
     System.debug('==> searchString = ' + searchString + ' -- caseid ' + caseId); 
     runSearch(); 
    } 

    // performs the keyword search 
    public PageReference search() { 
     runSearch(); 

     return null; 
    } 

    // performs the keyword search 
    public void ShowCaseToTrue() { 
     this.ShowCase=True; 
     system.debug('El id que tengo que buscar es: '+ IdChosen); 
     ChosenCase=[SELECT Id,CaseNumber FROM Case WHERE Id=:IdChosen]; 
    } 
} 

Я всегда получаю нулевое значение в IdChosen. Может ли кто-нибудь помочь мне в том, чего я здесь не хватает?

Большое спасибо!

Антонио

ответ

0

Пара вещей

1) Изменение IdChosen к типу Строка данных

public String IdChosen{get;set;} 

2) Изменение тест действие Функция

<apex:actionFunction name="test" action="{!ShowCaseToTrue}"> 
    <apex:param name="param1" assignto="{!IdChosen}" value="{!c.Id}"/> 
</apex:actionFunction> 
-1

Это окольный путь реализации этого подхода. Более «правильным» способом было бы использовать тег apex: commandLink. Таким образом, вместо этого:

<apex:outputLink onClick="test('{!c.Id}');return false;"> 
    {!c.Module_Release__c} 
</apex:outputLink> 

Написать это:

<apex:commandButton action="{!ShowCaseToTrue}"> 
    <apex:outputText value="{!c.Module_Release__c}"></apex:outputText> 
    <apex:param name="selectedId" value="{!c.Id}"></apex:param> 
</apex:commandButton> 

Затем в коде контроллера вы просто выполните поиск "selectedId" Имя:

String selectedId = ApexPages.currentPage().getParameters().get('selectedId'); 

И использовать это в вашем код вершины. Вы также можете изменить тип возвращаемого значения вашего метода с void на PageReference и вернуть нулевое значение из метода, чтобы страница не перезагружалась.

+0

Я думаю, вам также нужно добавить тег «reRender» к командной кнопке, чтобы предотвратить перезагрузку страницы и разрешить контроллеру страницы видеть, как новое значение возвращается из сообщения ajax. Тип возврата может оставаться недействительным. – DaveS

Смежные вопросы