コンポーネント フレームワークとして Prime Faces 3.4.1 を使用し、サーバー側フレームワークとして JSF 2.0 を使用しています。
以下は私の要件です
1)「会議が必要」というラベルの付いたフィールドがあります。次に、SelectOneRadio に「いいえ」と「はい」の 2 つのオプションを指定し、デフォルト値を「いいえ」に設定します。JSF/HTML コンポーネント h:SelectOneRadio を使用しています。
2) カレンダー コンポーネントである別のフィールドがあり、これはプライムフェイス カレンダー コンポーネントです。ユーザーが「会議が必要」であることを示す「はい」を選択した場合、ユーザーはカレンダー コントロールから日付を選択する必要があります。
3) ユーザーが「はい」を選択して日付を選択しない場合、日付を選択する必要があることを示す検証メッセージが表示されます。
Custom Validation コンポーネントを作成して SelectOneRadio にアタッチすると、カスタム バリデーターで選択した値を確認できます。ここで、UIComponent.getParent().findCompoent("rvmDate") を使用して、Calendar コンポーネントから値を取得して値が空かどうかを確認しようとしましたが、コンポーネントを取得しましたが、日付コンポーネントかどうかを確認する方法がわかりません。空であるか、任意の値が含まれています。
ユーザーが選択した日付の値を取得するのを手伝ってください。
問題を解決するために私を助けてください。それとも他に方法はありますか?ソースコードを見つけてください。
XHTML ページ
<h:selectOneRadio id="rvmMeetingOption"
readonly="#{wipMB.rvmMeetingOptionReadOnly}"
value="#{wipMB.requirementsMeeting}"
disabled="#{wipMB.rvmMeetingOptionDisabled}"
validator="#{wipMB.validateRVMDate}"
validatorMessage="Please enter RVM Date>
<f:selectItem itemLabel="No" itemValue="0"></f:selectItem>
<f:selectItem itemLabel="Yes" itemValue="1" ></f:selectItem>
<f:attribute value="#{rvmDateComp}" name="rvmDateComp"></f:attribute>
</h:selectOneRadio>
<p:calendar id="rvmDate"
readonly="#{wipMB.rvmMeetingDateReadOnly}"
disabled="#{wipMB.rvmMeetingDateDisabled}"
readonlyInput="true"
navigator="true" mode="popup"
pattern="dd/MM/yyyy"
value="#{wipMB.rvmDate}"
effect="explode"
yearRange="1900:2500"
style="margin-left:5px"
binding="#{rvmDateComp}"
</p:calendar>
<p:message id="rvmDateMsg" for="rvmDate" display="both" ></p:message>
カスタムバリデーター
public void validateRVMDate(FacesContext context, UIComponent component, Object value)
throws ValidatorException
{
String invalidDate;
String rvmOption;
Date rvmDate;
String rvmDt = "";
try
{
FacesContext fc = FacesContext.getCurrentInstance();
rvmOption = value.toString();
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
UIInput rvmCompDt = (UIInput)component.getAttributes().get("rvmDateComp");
rvmDateId = rvmCompDt.getId();
rvmDt = rvmCompDt.getSubmittedValue() == null ? "" : rvmCompDt.getSubmittedValue().toString();
if (rvmOption.equals("1") && rvmDt.isEmpty())
{
FacesMessage msg = new FacesMessage("RVM date is required");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
fc.addMessage("rvmDateMsg", msg);
throw new ValidatorException(msg);
}
}
catch (Exception ex)
{
String msg = ex.getMessage();
}
}