为什么我无法从控制器上的 visualforce 页面获取值?

Why am i not getting values from visualforce page on my controller?

当我尝试通过单击命令按钮从选项列表中获取选定值和 inputText 值时,它并没有真正将它们传递到我的控制器。

VF:

<apex:page controller="FieldsAndTypesPicklists" >
<apex:form >

    <apex:inputText value="{!newDatasetName}" />
    <apex:outputlabel value="Product type: "/>   

    <apex:selectList value="{!selectedTypeProd}" size="1">
        <apex:selectOptions value="{!TypesProduct}"/>
    </apex:selectList>

    <apex:commandButton value="Add new values" action="{!SaveValues}"  />
</apex:form>
</apex:page>

控制器:

public with sharing class FieldsAndTypesPicklists {

    public String selectedTypeProd {get; set;}

    public String newDatasetName { get; set; }

    public void SaveValues() {
        System.debug('>>> InputText value: '+newDatasetName);
    }

     public Set<SelectOption> getTypesProduct(){

        System.debug('>>> Select Type value: '+selectedTypeProd);
        Set<SelectOption> typesProd = new Set<SelectOption>();
        List<Schema.PicklistEntry> picklistEntryList = OpportunityLineItem.TypeProduct__c.getDescribe().getPicklistValues();

        for(Schema.PicklistEntry plEntry : picklistEntryList){
            String typeProduct = string.ValueOf(plEntry.getValue());
            typesProd.add(new SelectOption(typeProduct, typeProduct));
        }

        return typesProd;
    }  

 }

我已经进行了相应的调试以查看 inputText 和选择列表选择的值。

  1. selectedTypeProd 是 null
  2. 它没有执行方法 SaveValues()

如果我取出所选列表(在 VF 上)所在的代码段和控制器中的 getTypesProduct() 方法,它对 inputText 值工作正常。似乎另一部分正在影响执行。

您可以将 TypesProduct 作为一组字符串。所以它会起作用。

我遇到了同样的问题,通过添加 multiselect="false"

使其正常工作

更改您的代码
<apex:selectList value="{!selectedTypeProd}" size="1">

<apex:selectList value="{!selectedTypeProd}" size="1" multiselect="false">