реализация сохранения и новая кнопка не работает

Я перехожу по этой ссылке, чтобы создать функцию сохранения и создания новой функциональности на странице

Как реализовать функцию сохранения и создания на странице VisualForce < / а>

В соответствии с этим я сделал следующее

1.Создайте возможность класса вершины и реализуйте метод расширения

public with sharing class Opportunity
{
  ApexPages.standardController m_sc = null;

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


  public Pagereference doSaveAndNew()
  {
    SObject so = m_sc.getRecord();
    upsert so;

    string s = '/' + ('' + so.get('Id')).subString(0, 3) + '/e?';
    ApexPages.addMessage(new ApexPages.message(ApexPages.Severity.Info, s));
    return new Pagereference(s);
  }

  }

это хорошо компилируется

2. создать новую страницу, расширить контроллер, создать кнопку и вызвать метод

<apex:page sidebar="false" standardController="Opportunity" extensions="Opportunity" >
   <apex:form >
    <apex:pageMessages />
    {!Opportunity.Name}

    <apex:commandButton action="{!doSaveAndNew}" value="Save & New"/>
  </apex:form>
   </apex:page>

это дает мне ошибку "Неизвестный метод 'OpportunityStandardController.doSaveAndNew ()'"

Я не знаю, какой шаг мне не хватает в этом процессе

Какие-либо предложения


person neeraj    schedule 09.02.2017    source источник


Ответы (2)


Расширение класса APEX не должно совпадать с именем объекта Имя класса APEX OpportunityController Страница APEX OpportunityPage

Код должен быть <apex:page sidebar="false" standardController="Opportunity" extensions="OpportunityController" >

Я думаю, что имя класса, равное стандартному имени объекта, будет ошибкой

person Joseph M Tsai    schedule 10.02.2017

Как указал Джозеф, страница пытается получить доступ к методу стандартного контроллера OpportunityStandardController.doSaveAndNew () и не может его найти, поскольку и расширение, и стандартный контроллер называются одинаково, и он просто ищет не тот класс.

Вероятно, вам просто нужно переименовать расширение вашего контроллера во что-то другое. Обычно я добавляю «Расширение» в конец имени класса, чтобы знать, для чего оно предназначено. Например, что-то вроде «OpportunitySaveExtension». Затем обновите страницу visualforce, указав переименованный класс в атрибуте «Расширения».

extension = "OpportunitySaveExtension"

person Jake Hebert    schedule 10.02.2017