Регистрация  |  Вход

Кнопка Cancel на форме без проверки полей

Добрый день.
Вопрос может и совсем простой, но не нашел примеров в документации по VisualForce.
Сделал простую форму для редактирования контакта.
Вот код.
<apex:form >
<apex:pageBlock >
<apex:pageBlockSection columns="1">
<apex:inputField value="{!contact.FirstName}"/>
<apex:inputField value="{!contact.LastName}"/>
<apex:inputField value="{!contact.Email}"/>
<apex:inputField value="{!contact.Contact_Level__c}"/>
<apex:inputField value="{!contact.AccountId}"/>
</apex:pageBlockSection>
<apex:commandButton action="{!save}" value="Save" style="margin-right:5px"/>
<apex:commandButton action="{!URLFOR("/apex/ContactsList")}" value="Cancel"
</apex:pageBlock>
</apex:form>

Есть две кнопки – Save и Cancel.
На форме присутствует встроенный механизм проверки заполнения обязательных полей по щелчку на кнопки.
Для кнопки Save это отлично, но вот для Cancel эта проверка тоже срабатывает, а это совсем не нужно, при отмене требуется просто вернуться на заданную страницу.
Как можно отключить проверку полей формы для Cancel?

Добрый день. 
Вопрос может и совсем простой, но не нашел примеров в документации по VisualForce.
Сделал простую форму для редактирования контакта. 
Вот код.
  <apex:form >
      <apex:pageBlock >
          <apex:pageBlockSection columns="1">
              <apex:inputField value="{!contact.FirstName}"/>
              <apex:inputField value="{!contact.LastName}"/>
              <apex:inputField value="{!contact.Email}"/>
              <apex:inputField value="{!contact.Contact_Level__c}"/>
              <apex:inputField value="{!contact.AccountId}"/>
          </apex:pageBlockSection>
          <apex:commandButton action="{!save}" value="Save" style="margin-right:5px"/>  
[b]       <apex:commandButton action="{!URLFOR("/apex/ContactsList")}" value="Cancel" [/b] 
      </apex:pageBlock>
 </apex:form>

Есть две кнопки – Save и Cancel.
На форме присутствует встроенный механизм проверки заполнения обязательных полей по щелчку на кнопки.
Для кнопки Save это отлично, но вот для Cancel эта проверка тоже срабатывает, а это совсем не нужно, при отмене требуется просто вернуться на заданную страницу. 
Как можно отключить проверку полей формы для Cancel? 

action="{!cancel}"

Стандартный "Action" у всех контроллеров.

action="{!cancel}"

Стандартный "Action" у всех контроллеров.

У меня свой контроллер.
Но даже если использовать стандартный контроллер Contact, то все равно action="{!cancel}" не отрабатывает, пока не заполнено обязательное поле на форме.
Если заполнить поля - тогда отмена работает.
То есть проверка полей на форме идет до выполнения действия в контроллере.

У меня свой контроллер. 
Но даже если использовать стандартный контроллер Contact, то все равно action="{!cancel}" не отрабатывает, пока не заполнено обязательное поле на форме. 
Если заполнить поля - тогда отмена работает. 
То есть проверка полей на форме идет до выполнения действия в контроллере. 

Immediate="true"

Immediate="true"

Нет, не помогает.

Нет, не помогает. 

Если без standardController то у меня есть вот такое решение, которое работает

<apex:commandButton action="{!goBackToXXXRecord}" value="Go back" />

public PageReference goBackToXXXRecord() {
if (XXXId != null) {
return new PageReference('/../' + XXXId);
} else {
return new PageReference('/..');
}
}

Если без standardController то у меня есть вот такое решение, которое работает

[code]<apex:commandButton action="{!goBackToXXXRecord}" value="Go back" />[/code]

[code]public PageReference goBackToXXXRecord() {
    if (XXXId != null) {
      return new PageReference('/../' + XXXId);
    } else {
      return new PageReference('/..');
    }
  }[/code]

Но вообще, если у тебя там какой-то встроенный механизм влидации, то почитай документацию по этому механизму и найди, как отключать ее в определенных (как эта) ситуациях. В стандартном Visualforce все отрабатывает прекрасно.

Но вообще, если у тебя там какой-то встроенный механизм влидации, то почитай документацию по этому механизму и найди, как отключать ее в определенных (как эта) ситуациях. В стандартном Visualforce все отрабатывает прекрасно. 

wilder
Immediate="true"

beginner
Нет, не помогает.

Что значит не помогает? Это как раз и предназначено для твоего случая!

beginner
но вот для Cancel эта проверка тоже срабатывает, а это совсем не нужно, при отмене требуется просто вернуться на заданную страницу.

Проще сделать это средствами Javascript чем дергать SF без надобности.

top.location.href="your_url"

[quote="wilder"]Immediate="true"[/quote]
[quote="beginner"]Нет, не помогает.[/quote]
Что значит не помогает? Это как раз и предназначено для твоего случая!

[quote="beginner"]но вот для Cancel эта проверка тоже срабатывает, а это совсем не нужно, при отмене требуется просто вернуться на заданную страницу. [/quote]
Проще сделать это средствами Javascript чем дергать SF без надобности.

top.location.href="your_url"

[url=https://salesforce.stackexchange.com/questions/95859/purpose-of-apexcommandbutton-immediate-true]immediate='true' + Cancel[/url]

Всем спасибо.
Методом научного тыка узнал в чем дело.

<apex:page controller="SaveContact" showHeader="false" sidebar="false" applyHtmlTag="false" applyBodyTag="false" docType="html-5.0">


А вот если без docType="html-5.0", то кнопка Cancel работает отлично, и со стандартным контроллером, с нестандартным, immediate='true' не нужно.

<apex:page controller="SaveContact" showHeader="false" sidebar="false" applyHtmlTag="false" applyBodyTag="false">

Не знаю, критично ли отсутствие docType="html-5.0" в заголовке...

Всем спасибо. 
Методом научного тыка узнал в чем дело.

<apex:page controller="SaveContact" showHeader="false" sidebar="false" applyHtmlTag="false" applyBodyTag="false" [b]docType="html-5.0"[/b]> 


А вот если без [b]docType="html-5.0"[/b], то кнопка Cancel работает отлично, и со стандартным контроллером, с нестандартным, immediate='true' не нужно. 

<apex:page controller="SaveContact" showHeader="false" sidebar="false" applyHtmlTag="false" applyBodyTag="false"> 

Не знаю, критично ли отсутствие docType="html-5.0" в заголовке...

Я указываю docType="html-5.0" для того, чтоб использовать apex:input. Все работает отлично.
Хорошо, что все решилось.

Я указываю docType="html-5.0" для того, чтоб использовать apex:input. Все работает отлично.  
Хорошо, что все решилось.

Andrii Muzychuk
Я указываю docType="html-5.0" для того, чтоб использовать apex:input.

apex:input работает и без docType="html-5.0" (он появился задолго до того как html 5.0 вошел в повседневное использование) Но при включенном docType="html-5.0" появляется валидация формы на стороне браузера.

[quote="Andrii Muzychuk"]Я указываю docType="html-5.0" для того, чтоб использовать apex:input.[/quote]
apex:input работает и без docType="html-5.0" (он появился задолго до того как html 5.0 вошел в повседневное использование) Но при включенном docType="html-5.0" появляется валидация формы на стороне браузера.

Не знаю, Дима, как "твой" СФ, а мой СФ говорит

Error: Component <apex:input> in '/apex/ХХХ' requires HTML docType version 5.0 or higher in ХХХ at line 170 column 57

Не знаю, Дима, как "твой" СФ, а мой СФ говорит
[code]Error: Component <apex:input> in '/apex/ХХХ' requires HTML docType version 5.0 or higher in ХХХ at line 170 column 57	
[/code]

А! Все возможно. Наверное в каком-то из релизов решили отказаться от поддержка старой версии html. Я так написал потому что помню еще годика 3 такой проблемы не было.
А так как я уже 3-й год активно практикую ангуляр с JS то поэтому можно сказать что не в теме. Спасибо что просвятил!!!

А! Все возможно. Наверное в каком-то из релизов решили отказаться от поддержка старой версии html. Я так написал потому что помню еще годика 3 такой проблемы не было.
А так как я уже 3-й год активно практикую ангуляр с JS то поэтому можно сказать что не в теме. Спасибо что просвятил!!! :) 

Dmitry Shnyrev
А! Все возможно. Наверное в каком-то из релизов решили отказаться от поддержка старой версии html. Я так написал потому что помню еще годика 3 такой проблемы не было.
А так как я уже 3-й год активно практикую ангуляр с JS то поэтому можно сказать что не в теме. Спасибо что просвятил!!! :)

А я как раз использую по возможности исключительно чистый Visualforce.

[quote="Dmitry Shnyrev"]А! Все возможно. Наверное в каком-то из релизов решили отказаться от поддержка старой версии html. Я так написал потому что помню еще годика 3 такой проблемы не было.
А так как я уже 3-й год активно практикую ангуляр с JS то поэтому можно сказать что не в теме. Спасибо что просвятил!!! :)[/quote]
А я как раз использую по возможности исключительно чистый Visualforce.