我是新手,在salesforce中,目前正在学习Visualforce元素。
我的代码存在问题,当我在visualForce页面中插入SelectList代码时,页面重新呈现将停止工作。
没有SelectList页面重新呈现效果很好。
我在下面提供了代码段。从控制器未添加的SelectList保存方法后,也未调用联系人,但我尝试插入的联系人未插入。
感谢您的帮助。
这是我的visualforce页面。
<apex:page controller="ContactController">
<apex:form >
<apex:pageBlock>
<apex:pageBlockSection >
<apex:inputField value="{!Contact.AccountId}" label="Account Name:"/>
<apex:inputField value="{!Contact.LastName}" label="LastName"/>
<apex:inputField value="{!Contact.phone}" label="Phone"/>
<apex:inputField value="{!Contact.Department}"/>
<apex:inputField value="{!Contact.Designation__c}"/>
</apex:pageBlockSection>
<apex:pageBlockSection id="id3">
<apex:pageBlockSectionItem >
<apex:actionRegion >
<apex:selectList value="{!Contact}" multiselect="true" id="slist1" style="overflow scroll; height : 100px;">
<apex:actionSupport event="onchange" rerender="id1" />
<apex:selectOptions value="{!ContactFields}"></apex:selectOptions>
</apex:selectList><p/>
</apex:actionRegion>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
<apex:pageBlockSection id="id1">
<apex:pageBlockTable value="{!contactList}" var="c" >
<apex:column headerValue="Last Name">
<apex:outputField value="{!c.Lastname}"/>
</apex:column>
<!-- <apex:column headerValue="Account">
<apex:outputField value="{!c.Account.Name}"/>
</apex:column> -->
</apex:pageBlockTable>
</apex:pageBlockSection>
<apex:pageBlockButtons >
<apex:commandButton value="Save" action="{!save}" reRender="id1"/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
</apex:page>
这是我的控制器。
public class ContactController {
public Account account { get; private set; }
public Contact contact { get; set; }
public List<Contact> contactList{get {return ([SELECT LastName,Account.Name FROM Contact where Account.Id = :ApexPages.currentPage().getParameters().get('id') order by createdDate DESC limit 5]);} set;}
public Id id;
Map<String, Schema.SobjectField> Contactfields{ get; set;}
List<SelectOption> lstContactFields{get;set;}
public ContactController() {
contact=new Contact();
id = ApexPages.currentPage().getParameters().get('id');
contact.AccountId=id;
Contactfields = Schema.SobjectType.Contact.fields.getMap();
}
public List<SelectOption> getContactFields(){
if(lstContactFields==null){
lstContactFields=new List<SelectOption>();
}
for(Schema.SObjectField s:Contactfields.values()){
Schema.DescribeFieldResult fieldResult = s.getDescribe();
lstContactFields.add(new SelectOption(String.valueof(fieldResult.getName()),String.valueof(fieldResult.getLabel())));
// lstContactFields.add(Contactfields.get(s).getDescribe().getLabel());
//lstContactFields.add(String.valueOf(s));
}
return lstContactFields;
}
public PageReference save() {
try {
System.debug('save method');
upsert contact;
contact.Id=null;
return null;
} catch(System.DMLException e) {
ApexPages.addMessages(e);
return null;
}
// After successful Save, navigate to the default view page
// PageReference pg = new PageReference(System.currentPageReference().getURL());
// pg.setRedirect(true);
// return pg;
}
}
答案 0 :(得分:0)
您在这些组件上的值绑定设置不正确。
function lightStars () {
var starNumber = e.target.alt;
var stars = document.querySelectorAll("span#stars img");
stars.forEach((function(x){ x.setAttribute("src", "bw_star2.png");}))
}
<apex:selectList value="{!Contact}" multiselect="true" id="slist1" style="overflow scroll; height : 100px;">
需要绑定到<apex:selectList>
或String
(仅用于List<String>
)。在这里,您已将其绑定到sObject变量。
您已将sObject变量与其类multiselect=true
命名相同,这很可能导致进一步的问题。 Apex区分大小写,因此Contact
和contact
是相同的标识符。通常,您不应将保留字或系统类名称重用作为变量名,而要使用Contact
再次这样做。
id
<apex:selectOptions value="{!ContactFields}"></apex:selectOptions>
必须将其<apex:selectOptions>
绑定到value
。您用该名称声明的属性类型有误:
List<SelectOptions>
同时实现正确类型的getter方法:
Map<String, Schema.SobjectField> Contactfields{ get; set;}
同样,即使它确实进行编译和渲染,这也可能会产生不直观的行为。