2016-01-18 2 views
1

Я использую таблицу блокировки страниц на странице визуальной силы, и каждая строка имеет переключатели, я хочу передать значение каждой выбранной радио кнопки из каждой строки на странице визуальной силы для вершины класса контроллера.Передача нескольких значений кнопок радио с страницы визуальной силы на контроллер

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

Визуальная Force Page

<apex:pageBlockTable value="{!SurveyQuestions}" var="sq"> 
     <apex:column value="{!sq.Id}"/> 
     <apex:column value="{!sq.Name}"/> 
     <apex:column value="{!sq.QuestionID__r.Question__c}"/> 
     <apex:column value="{!sq.QuestionID__r.Id}" headerValue="Question ID"/> 
     <apex:column headerValue="HiddenQuestion Id"> 
     <apex:inputHidden value="{!sq.QuestionID__r.Id}" id="HdnQuestionID"/> 
     </apex:column> 
     <apex:column headerValue="Question options"> 
      <apex:selectRadio value="{!selectedAnswer}"> 
       <apex:selectOptions value="{!items}"/> 
      </apex:selectRadio> 
     </apex:column> 
    </apex:pageBlockTable> 

Apex контроллер класса

public with sharing class GbPracticeController { 

public tblSurvey__c SurveyObj {get;set;} 

public string SelectedAnswer     {get;set;} 
public list<tblSurveyQuestion__c> SurveyQuestions {get;set;} 

public GbPracticeController(ApexPages.StandardController controller) { 
     SurveyObj = new tblSurvey__c(); 

} 


public PageReference SaveSurvey() { 
    insert SurveyObj; 
    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Survey Submitted Successfully')); 

    return null; 
} 

//Listing Survey Related Questions 
public ApexPages.StandardSetController setSurveyQuestions { 
    get { 
     if(setSurveyQuestions == null) { 
      setSurveyQuestions = new ApexPages.StandardSetController(Database.getQueryLocator(
       [SELECT Id,Name,fo__QuestionID__c,fo__SurveyID__c, fo__QuestionID__r.Id,fo__QuestionID__r.Name,fo__QuestionID__r.fo__Question__c, fo__QuestionID__r.fo__SelectedAnswer__c FROM fo__tblSurveyQuestion__c WHERE fo__SurveyID__c = 'a0R28000000FfXaEAK'])); 
     } 
     return setSurveyQuestions; 
    } 
    set; 
} 
// Initialize getSurveyQuestions and return a list of records 
public List<tblSurveyQuestion__c> getSurveyQuestions() { 
    return (List<tblSurveyQuestion__c>) setSurveyQuestions.getRecords(); 
} 

public List<SelectOption> getItems() { 
    List<SelectOption> options = new List<SelectOption>(); 
    options.add(new SelectOption('yes','Yes')); 
    options.add(new SelectOption('no','No')); 
    options.add(new SelectOption('Maybe','maybe')); 
    return options; 
} 

public PageReference SubmitResult() { 

// Multiple Checkbox value Logic Goes Here 
for (SurveyQuestionsType sqItem : SurveyQuestions) { 
     if(sqItem.SelectedAnswer__c == 'yes') { 

       //Inserting The Survey Result   
       tblSurveyResult__c SurveyResult = new tblSurveyResult__c(
         Name = sqItem.SelectedAnswer__c, 
         Answer__c = 1 
        ); 
       insert SurveyResult; 


      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Survey Submitted Successfully')); 

     } else if (sqItem.SelectedAnswer__c == 'no'){ 

      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,sqItem.SelectedAnswer__c)); 

     } else { 
      ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Please Select Atleast one value')); 
     } 
    } 
    return null; 
} 
// qwerty 
} 

ответ

0

Я предлагаю вам добавить новое пользовательское поле, как SelectedAnswer, изменить

apex:selectRadio value="{!selectedAnswer}"> 

в

apex:selectRadio value="{!sq.SelectedAnswer__c}"> 

и контроллер изменен

public PageReference SubmitSurvey() { 

// Multiple Checkbox value Logic Goes Here 
foreach (SurveyQuestionsType sqItem : getSurveyQuestions()) { 
if(sqItem.SelectedAnswer__c == 'yes'){ 

      //Inserting The Survey Result 

      tblSurveyResult__c SurveyResult = new tblSurveyResult__c(
        Name = sqItem.SelectedAnswer__c, 
        Answer__c = 1 
       ); 
      insert SurveyResult; 


    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Survey Submitted Successfully')); 

} else if (sqItem.SelectedAnswer__c == 'no'){ 

    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,sqItem.SelectedAnswer__c)); 

} else { 
    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Please Select Atleast one value')); 
} 
} 
return null; 
} 

Или, вместо того, чтобы добавлять только поле для пользовательского объекта, вы можете создать DTO этого объекта с новым полем SelectedAnswer и работать с DTO.

Кроме того, во время вывода ошибки я бы добавил указание на то, что ответили неправильно.

+0

Спасибо вам ответить. я пытаюсь это, но я получаю «Ошибка компиляции: ожидая правильных круглых скобок, нашел« sqItem »в строке 44 столбца 32« Можете ли вы рассказать мне, почему это happeing. –

+0

Я редактировал и вставлял новый код выше, пожалуйста, проверьте, что я все еще получаю ошибку: «Недопустимый тип: SurveyQuestionsType в строке 48 столбцов 10». –

+0

@AdilShah, а не SurveyQuestionsType, вы должны поместить свое имя sObject. И это не полный код. Это просто для начала. Другие вещи, которые вы должны написать самим. Я дал вам направление. –

1

Отвечая на мой собственный вопрос, может быть полезным для кого-то еще

VF Page

<apex:pageBlockTable value="{!SurveyQuestions}" var="sq"> 
     <apex:column value="{!sq.Id}"/> 
     <apex:column value="{!sq.Name}"/> 
     <apex:column value="{!sq.QuestionID__r.Question__c}"/> 
     <apex:column value="{!sq.QuestionID__r.Id}" headerValue="Question ID"/> 
     <apex:column headerValue="HiddenQuestion Id"> 
      <apex:inputHidden value="{!sq.QuestionID__r.Id}"/> 
     </apex:column> 
     <apex:column headerValue="Question options"> 
      <apex:selectRadio value="{!sq.QuestionID__r.SelectedAnswer__c}"> 
       <apex:selectOptions value="{!items}"/> 
      </apex:selectRadio> 
     </apex:column> 
    </apex:pageBlockTable> 

    <apex:commandButton value="Submit Survey Result" action="{!SubmitSurvey}" rerender="StartSurveyForm"/> 


Apex Код класса

public PageReference SubmitSurvey() { 

// Multiple Checkbox value Logic Goes Here 

for (tblSurveyQuestion__c sqItem : getSurveyQuestions()) { 
    if(sqItem.QuestionID__r.SelectedAnswer__c == 'yes'){ 

       //Inserting The Survey Result 

       tblSurveyResult__c SurveyResult = new tblSurveyResult__c(
         Name = sqItem.QuestionID__r.SelectedAnswer__c, 
         Answer__c = decimal.valueof('1'), 
         QuestionID__c = sqItem.QuestionID__r.Id, 
         SurveyID__c= surveyId 
        ); 
       insert SurveyResult; 

     } else{ 

       ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Please Select Atleast one value')); 
     } 
    } 
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.CONFIRM,’Survey Result Successfully Submitted')); 
    return null;} 
Смежные вопросы