+ Start a Discussion
Taiki YoshikawaTaiki Yoshikawa 

docType="html-5.0"の必須チェックについて

Visualforceページの開発でdocType="html-5.0"を宣言した際の必須チェックについて困っています。
リストの行を追加するボタンをクリックしたときは必須チェックをスキップするようにしたいです。

通常は『immediate="true"』を宣言しておけば必須チェックをスキップできます。
<apex:commandButton value=" Add Contacts " action="{!addContacts}" immediate="true" />

ですが、docType="html-5.0"を宣言したときは『immediate="true"』を宣言してもフォームの必須チェックが実行されてしまいます。
User-added image

『html-formnovalidate="formnovalidate"』を宣言することで回避できたのですが、このときreRenderを宣言すると『immediate="true"』の宣言が無効になってしまいました。reRenderを宣言しながら必須チェックをスキップしたいです。どなたか解決方法をご存知の方がいらっしゃいましたら教えてください。


補足
『html-formnovalidate="formnovalidate"』を宣言すると必須チェックをスキップできる。
<apex:commandButton value=" Add Contacts " action="{!addContacts}" immediate="true" html-formnovalidate="formnovalidate" />
User-added image

この状態でreRenderを宣言すると『immediate="true"』の宣言が効かなくなる。
<apex:commandButton value=" Add Contacts " action="{!addContacts}" reRender="form" immediate="true" html-formnovalidate="formnovalidate" />
User-added image

動作確認に使ったコードです。
HtmlFormnovalidateDemo.page
<apex:page standardController="Account" extensions="HtmlFormnovalidateDemoController" docType="html-5.0" sidebar="false">
    <apex:form id="form">
        <apex:pageMessages id="msg" />
        <apex:pageBlock id="block">
            <apex:pageBlockButtons id="buttons" location="bottom">
                <apex:commandButton value=" Save " action="{!Save}" reRender="form" />
                <apex:commandButton value=" Cancel " action="{!Cancel}" reRender="form" immediate="true" html-formnovalidate="formnovalidate" />
                <apex:commandButton value=" Add Contacts " action="{!addContacts}" immediate="true" html-formnovalidate="formnovalidate" reRender="form" />
            </apex:pageBlockButtons>
            <apex:pageBlockSection id="section">
                <apex:inputField value="{!Account.Name}" required="true" html-placeholder="取引先名を入力" />
                <apex:inputField value="{!Account.AccountNumber}" />
            </apex:pageBlockSection>
            <apex:pageBlockTable value="{!contacts}" var="item">
                <apex:column headerValue="{!$ObjectType.Contact.Fields.LastName.Label}">
                    <apex:inputField value="{!item.LastName}" required="true" />
                </apex:column>
                <apex:column headerValue="{!$ObjectType.Contact.Fields.FirstName.Label}">
                    <apex:inputField value="{!item.FirstName}" />
                </apex:column>
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>
HtmlFormnovalidateDemoController.cls
public with sharing class HtmlFormnovalidateDemoController {
    
    public List<Contact> contacts {get; set;}
    
    public HtmlFormnovalidateDemoController(ApexPages.StandardController stdController) {
        this.contacts = new List<Contact>();
    }
    
    public void addContacts() {
        this.contacts.add(new Contact());
    }
}

よろしくおねがいします。