我需要验证用户通过 visualforce 页面输入的日期字段。我的代码期望的格式是“yyyy-MM-dd”。
在顶点处理这个问题的最佳方法是什么。在使用 Apex 中不可用的某些标准类(例如 SimpleDateFormat)之前,我在 Java 中做过类似的事情。
现在我可以使用正则表达式检查“格式”是否正确。但我还必须阻止用户输入满足格式的“9999-99-99”。我希望 Salesforce 有一个好的内置解决方案。
谢谢,卡尔文
我需要验证用户通过 visualforce 页面输入的日期字段。我的代码期望的格式是“yyyy-MM-dd”。
在顶点处理这个问题的最佳方法是什么。在使用 Apex 中不可用的某些标准类(例如 SimpleDateFormat)之前,我在 Java 中做过类似的事情。
现在我可以使用正则表达式检查“格式”是否正确。但我还必须阻止用户输入满足格式的“9999-99-99”。我希望 Salesforce 有一个好的内置解决方案。
谢谢,卡尔文
你可以试试我所说的控制欺骗。我基本上创建了一个空的 sObject,它有一个日期字段,如 Task 对象(或类似的轻量级对象)。在屏幕上,我显示将呈现本地日期字段的任务日期的输入。这样做,您可以让 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 上使用格式,但可以在 DateTime 上使用,所以我只需将 Date 转换为 DateTime,然后使用 format 方法来格式化我的日期。
伙计们,我设法解决了我的问题,因为无论如何它有点独特。
所以我使用正则表达式来验证输入日期的格式,以确保它是 yyyy-MM-dd 格式。
我使用的Date.valueOf
这个内置方法总是采用 yyyy-MM-dd 形式的日期。如果它具有像 9999-99-99 等错误的值,它会引发异常......我向用户显示异常的消息,e.getMessage()
以完成我对日期字段的验证。