首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在<apex:repeat>中时无法获取<apex:selectRadio>的值

在<apex:repeat>中时无法获取<apex:selectRadio>的值
EN

Stack Overflow用户
提问于 2013-07-05 08:42:06
回答 1查看 3.5K关注 0票数 1

当我使用repeat中的<apex:selectRadio>设置visualforce页面时,似乎无法将选定的值返回到控制器中。如果我把它移出重复部分,它就能正常工作。有什么想法吗?

控制器:

代码语言:javascript
复制
public with sharing class COPE_TestsExt {
public id tid {get;set;}
public boolean showTestSelect {get;set;}
public list<COPE_Tests__c> tests {get;set;}
public list<COPE_questions__c> questions {get;set;}
public list<List<SelectOption>> options {get;set;}
public COPE_results__c results {get;set;}
public list<string> rid {get;set;}   

public COPE_TestsExt(ApexPages.StandardController controller) {   

    results = new COPE_results__c();
    showTestSelect = true;
    tests = [select id, name from COPE_Tests__c];
    tid = null; 

}

public PageReference setTid(){

    integer ridCount = 0;       
    showTestSelect = false;
    tid = ApexPages.CurrentPage().getParameters().get('tid');
    results.cope_test__c = tid;
    questions = [select id, name, question_body__c, (select id, name, option_body__c from COPE_options__r order by name ASC) from COPE_questions__c ];
    options = new List<List<SelectOption>>();
    for(COPE_Questions__C q : questions){
        ridCount++;
        List<SelectOption> l = new List<SelectOption>();
        for(COPE_options__c op : q.COPE_options__r){
            l.add(new SelectOption(string.valueof(op.id), op.option_body__c));
        }
        options.add(l);
    }
    rid = new string[ridCount];
    integer tempCount = 0;
    while(tempCount < ridCount){
    rid[tempCount] = '';
    tempCount++;
    }

    return null;
}      
public pagereference submit(){
  return null;
}       
}

页面:

代码语言:javascript
复制
    <apex:page showHeader="false" standardController="COPE_Tests__c" extensions="COPE_TestsExt" >
<apex:form id="theForm" >
<apex:pageblock >
    <apex:outputPanel id="testSelect">

    <apex:pageBlockTable value="{!tests}" var="t" rendered="{!showTestSelect}"  >
    <apex:column headerValue="Please select a test:" ><apex:commandLink reRender="testSelect,testPage" action="{!setTID}"  >{!t.name}<apex:param name="tid" value="{!t.id}"/></apex:commandLink></apex:column>
    </apex:pageBlockTable>
    </apex:outputPanel>
    <apex:outputPanel id="testPage">
    <apex:outputText rendered="{!not(showTestSelect)}">
    <apex:pageBlockSection collapsible="false" title="User Information" columns="1">
        <apex:inputField label="What is your full name?" value="{!results.name}" required="false"/>
        <apex:inputField label="What is your email address?" value="{!results.Email__c}" required="false"/>
        <apex:inputField label="What is your OE Tracker #?" value="{!results.OE_Tracker__c}" required="false"/>
    </apex:pageBlockSection>
    <apex:pageBlockSection collapsible="false" title="Test Questions" columns="1">
    <apex:variable var="count" value="{!0}" />
    <apex:repeat value="{!questions}" var="q">
    {!count+1}. {!q.Question_Body__c}
    <apex:repeat first="{!count}" rows="1" value="{!options}" var="op">
    <apex:selectRadio value="{!rid[count]}" >
    <apex:selectOptions value="{!op}" />
    </apex:selectRadio>
    </apex:repeat>
<apex:variable var="count" value="{!count+1}"/>
</apex:repeat>
<apex:commandButton reRender="check" action="{!submit}" value="Submit"/>
</apex:pageBlockSection>
</apex:outputtext>
</apex:outputPanel>
<apex:outputPanel id="check">
{!rid[0]}
</apex:outputPanel>
</apex:pageblock>
</apex:form>
</apex:page>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-09 05:06:12

如果我没弄错,你想存储在

代码语言:javascript
复制
public list<List<SelectOption>> options {get;set;}

可能的答案。因此,更好的方法可能是将其存储在从Question.Id到列表的映射中,如下所示

代码语言:javascript
复制
public Map<Id,List<SelectOption>> options {get;set;}
...    
for(COPE_Questions__C q : questions){
    ridCount++;
    List<SelectOption> l = new List<SelectOption>();
    for(COPE_options__c op : q.COPE_options__r){
        l.add(new SelectOption(string.valueof(op.id), op.option_body__c));
    }
    options.put(q.Id,l);
}

然后在VF页面中,你可以做类似这样的事情

代码语言:javascript
复制
<apex:repeat value="{!questions}" var="q">
  {!count+1}. {!q.Question_Body__c}
<apex:selectRadio value="{!rid[count]}" >
<apex:selectOptions value="{!options[q.Id]}" />
</apex:selectRadio>
<apex:variable var="count" value="{!count+1}"/>
</apex:repeat>

希望能有所帮助。

附言:我可能误解了你的代码(他的可读性不是很好),如果是这样,不要生气:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17479665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档