Передача параметра из Visualforce в вершину Ошибка
У меня есть страница visualforce, где я показываю в таблице список случаев, которые я получаю из своего класса Apex.
Это моя зрительная сила:
<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 и хочу передать идентификатор случая, который пользователь щелкнул в таблице. Это мой верхний класс:
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. Кто-нибудь может мне помочь в том, что мне здесь не хватает?
Большое спасибо!
Антонио
2 ответа
Пара вещей
1) Измените IdChosen на тип данных String.
public String IdChosen{get;set;}
2) Изменить действие Тест функции
<apex:actionFunction name="test" action="{!ShowCaseToTrue}">
<apex:param name="param1" assignto="{!IdChosen}" value="{!c.Id}"/>
</apex:actionFunction>
Это окольный способ реализации этого подхода. Более "правильным" способом было бы использовать вместо этого тег 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 и вернуть нулевое значение из метода, чтобы страница не перезагружалась.