2012-01-19 8 views
7

Sé que esto es cómo guardar un registroCómo implementar "Cancelar" funcionalidad en un Visualforce Página

<apex:commandButton action="{!save}" value="Save"/> 

Quiero un botón Si no desea guardar el registro actual (es decir. Cancelar) y vaya a la lista de registros guardados (es decir, lista de objetos para ese tipo de objeto).

Algo como esto ...

<apex:commandButton action="{!cancel}" value="Cancel"/> 

Respuesta

9

La vista de lista para un objeto es su URL base/el prefijo de 3 letras para su/o de objeto, por ejemplo:

https://na1.salesforce.com/a0C/o 

Por lo que podría simplemente crear un método de acción que devuelva Pagereference con la URL apropiada y establecerse para redirigir (pr.setRedirect(true)).

Como alternativa, puede utilizar el controlador como una extensión a un controlador estándar, y justo call cancel on the standard controller:

// controller extension 
public class TimeSheetExtension 
{ 
    ApexPages.standardController m_sc = null; 

    public TimeSheetExtension(ApexPages.standardController sc) 
    { 
    m_sc = sc; 
    } 

    public PageReference doCancel() 
    { 
    return m_sc.cancel(); 
    } 
} 

// page 
<apex:commandButton action="{!doCancel}" value="Cancel"/> 

Tenga en cuenta que esto no significa necesariamente lo lleve a la vista de lista, él se puede volver a la última página que estabas viendo antes de ir a la página de VF.

+1

Siempre trato de usar los métodos del controlador, ya que teóricamente su protegido de los cambios de formato de URL. –

+0

Todos los ID de objeto para los registros de ese objeto tendrán las mismas 3 letras al comienzo, pero como dice Jeremy, es mejor usar las acciones estándar siempre que sea posible. Debería poder cambiar su controlador a una extensión simplemente agregando un parámetro de controlador estándar al constructor, y modificando la etiqueta '' para que tenga 'standardController =" MyObject__c "extensions =" ​​MyCustomController "' –

+0

Esto no funciona cuando cancela el modo ajax devolviendo nulo. Guardo los datos inválidos en el campo del año y el campo me dan error. cuando se cancela, vuelve a la vista de solo lectura pero los datos se cambian a datos no válidos.Sin embargo, al actualizar la página, los datos no válidos no están allí y se muestran los datos anteriores. – powerfade917

1

Si bien la aplicación cancelar Visualforce operación que debe dejar el formulario a continuación validation.Use alguna uno métodos para detener la validación de formularios en función de sus necesidades.

Método 1:

Usando HTML-5 en tipo de documento en la página Visualforce significa que puedes usar html-formnovalidate y immediate en el botón de cancelación. Por ejemplo

<apex:commandButton action="{!cancel}" value="Cancel" immediate="true" 
        html-formnovalidate="formnovalidate" /> 

Método 2:

se debe utilizar immediate palabra clave sólo es necesario para detener la validación de formularios. Por ejemplo

<apex:commandButton action="{!cancel}" value="Cancel" immediate="true"/> 
Cuestiones relacionadas