I have a below Visualforce page , where I am getting a user input using drop down selection. This input is for a custom field of an object which I need to update once I click save on the VF page.
VF page( part in scopr):
<apex:pageBlockSection columns="1" title="TECHNICAL ASSESSMENT">
<apex:repeat value="{!interviewSkillReviews}" var="interview">
<apex:pageblockTable value="{!interview.Skill_review__r}" var="skillreview">
<apex:column headerValue="Rating">
<apex:outputField value="{!skillreview.RatingCopy__c}" rendered="{!NOT(interviewerMode)}"/>
<apex:selectList value="{!rating}" multiselect="false" size="1" rendered="{!interviewerMode}" >
<apex:selectOption itemValue="1" itemLabel="1"/>
<apex:selectOption itemValue="2" itemLabel="2"/>
<apex:selectOption itemValue="3" itemLabel="3"/>
<apex:selectOption itemValue="4" itemLabel="4"/>
<apex:selectOption itemValue="5" itemLabel="5"/>
</apex:selectList>
</apex:column>
</apex:pageblockTable>
</apex:repeat>
</apex:pageBlockSection>
I use a wrapper class to update a field called rating:
public class SkillReviewWrapperTest{
public Skill_Review__c skillReview{get;set;}
public String rating{get;set;}
public SkillReviewWrapperTest(Skill_Review__c skillReview){
this.skillReview = skillReview;
this.rating = skillReview.Rating__c;
}
}
In my extension class I do below. Here Skill_Review__c is the custom object in which there is field called rating which I am trying to update with the value that user enter in drop down selection option on VF page:
public String rating{get;set;}
public List<SkillReviewWrapperTest> SkillReviewList{get;set;}
private void initSkillReviews() {
skillReviewList=new List<SkillReviewWrapperTest>();
for(Skill_Review__c sr: [SELECT Id,Name,Skill__c,Level__c,Skill_Level_Description__c,Recommended_Level_Description__c,Rating__c,Level_of_Skill__c FROM Skill_Review__c where Interview__c =:interview.id ]){
skillReviewList.add(new SkillReviewWrapperTest(sr));
}
public pagereference saveInterviewerFeedback(){
Set<String> setLevels = new Set<String>();
for(SkillReviewWrapperTest obj: skillReviewList)
{
obj.rating=rating;
setLevels.add(obj.rating);
}
map<String, Id> mapLevelName = new map<String, Id>();
for(Level__c ratingObj:[SELECT Skill_of_Level__c,Id, Name FROM Level__c WHERE Name IN: setLevels ])
{
// store the id, name in a Map to be used later
mapLevelName.put(ratingObj.Skill_of_Level__c, ratingObj.Id);
}
List<Skill_Review__c > updateLevelInSkillReview= new List<Skill_Review__c>();
for(SkillReviewWrapperTest obj: skillReviewList)
{
// put the level id in SkillreviewList's Level__c, to be updated in database
// get the level id using the level name selected by user in picklist stored in SkillReviewList
obj.skillReview.rating__c = mapLevelName.get(obj.skillReview.Level_of_Skill__c);
updateLevelInSkillReview.add(obj.skillReview);
}
update updateLevelInSkillReview;
return null;
}
Here is how it looks like:
After saving all skills get the value 5:
This is my whole code in scope of this problem.
Problem : So for each skill I see a drop down under rating column which I can select. For example for skill1 user selects 2, skill2 user selects 4, for skill3 user selects 5, but when I save the page which calls saveInterviewerFeedback() method , I see all the skills rating are updated as 5. I noticed that the skill rating which user selects at the end is updated for all the other skills. How do I update the rating value for each skills individually in the code?
FYI - this page uses a standard controller of object Interview__C and Skill_Review__c is a child of Interview__C.