tema de enlace de datos InputField con Visualforce
-
20-09-2019 - |
Pregunta
Estoy teniendo resultados extraños con una página Visualforce (sí, Salesforce.com es repulsivo, lo sé). Mi problema es que estoy tratando de utilizar el InputField para enlazar datos en un sObject costumbre, pero en mi controlador personalizado, que no reconoce los datos de entrada del usuario.
Aquí está el fragmento de código de la página:
<apex:pageBlockSection title="Enter New Fee" rendered="{!isRenderedFees}" >
<apex:inputField value="{!workingFee.Fee_Type__c}" required="True"/>
<apex:inputField value="{!workingFee.Fee__c}" required="True"/>
<apex:pageBlockSectionItem >
<apex:CommandButton value="Save Fee" action="{!saveFee}" immediate="true" />
<apex:CommandButton value="Cancel" action="{!cancelFee}" immediate="true" />
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
y aquí es el código del controlador:
public Fee__c workingFee {get; set;}
....
public PageReference saveFee(){
this.workingFee.Trade_Group__c = tradeGroup.id;
try{
System.debug('~~~~#~~#~~workingFee: '+workingFee.Fee_Type__c +'='+workingFee.Fee__c);
upsert workingFee;
}catch (System.Dmlexception e){
ApexPages.addMessages(e);
return null;
}
System.debug('~~~~#~~#~~workingFee: '+workingFee.Fee_Type__c +'='+workingFee.Fee__c);
//savedFees.add(workingFee.clone());
//re-render the page
this.isRenderedFees = False;
return null;
}
He hecho de que la propiedad workingFee no es nulo. Cada vez que pulsa el botón "Guardar Fee" después de introducir los valores, se vuelven a cargar la página y me da el mensaje "Error: Los campos necesarios están ausentes: [Fee__c]" (nota, Fee__c aquí es un campo de moneda - No es que se espera que esto sea un sObject, ¿verdad?)
La declaración de depuración en el método saveFee () muestra que los campos importantes de workingFee son nulos, cuando yo esperaría que se han asignado los valores introducidos por el usuario.
Solución
He tenido un montón entero de temas controles que se unen a una propiedad expuesta con la simple {get; conjunto; } Notación ... El resto del código verá las propiedades, pero por alguna extraña razón, su vista no (siempre) se unen ...
Trate de escribir métodos get / set explícitas, como
private workingFee;
public Fee__c getWorkingFee() {
return workingFee;
}
public void setWorkingFee(Fee__c value) {
workingFee = value;
}
No hay ninguna razón lógica para que esto debería funcionar diferente a
public Fee__c workingFee { get; set; }
pero en mi experiencia, a veces se hace ...
lo que has dicho acerca de que sea repulsivo? ;)
Otros consejos
inmediata = verdadero / falso me ha mordido unas cuantas veces demasiado. Buena captura Ian.