私が制御スプーフィングと呼んでいるものを試してみてください。基本的に、Task オブジェクト (または同様に軽量なもの) のような日付項目を持つ空の sObject を作成します。画面に、ネイティブの日付フィールドをレンダリングするタスク日付の入力を表示します。これを行うと、Salesforce がユーザーからの日付入力を検証し、ユーザーは素敵なカレンダー ポップアップも取得します。
これは、コントローラーでどのように見えるかのサンプルです
public class MyController {
public Task DateInput {get;set;}
public MyController() {
DateInput = new Task();
}
public void save() {
Date dInputDate = DateInput.ActivityDate;
//Format Date
DateTime dtValue = DateTime.newInstance(dInputDate.year(), dInputDate.month(), dInputDate.day());
string sFormattedDate = dtValue.format('yyyy-MM-dd');
}
}
ページは次のようになります
<apex:page controller="MyController">
<apex:form>
<apex:pageBlock>
<apex:pageBlockSection>
<apex:pageBlockSectionItem>
<apex:outputLabel for="inputDate" value="My Date"/>
<apex:inputField value="{!DateInput.ActivityDate}" />
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
save メソッドで行った書式設定に注目してください。Date では format を使用できませんが、DateTime では使用できるため、Date を DateTime に変換し、format メソッドを使用して日付をフォーマットします。