あなたの問題は、別のフィールド ( invitation.id
) をnewText
フィールド バリデーターに検証しようとしていることです (可能だとは思いませんが、よくわかりません)。
ただし、それを2つのバリデーターに分割して、失敗のケースに対応するメッセージを発生させることができます。これはより正しい私見です。
<field name="invitation.id">
<field-validator type="required">
<message>${getText("validation.invitation.id.required")}</message>
</field-validator>
</field>
<field name="newText">
<field-validator type="fieldexpression">
<param name="expression">
<![CDATA[
newText != null && !newText.trim().empty())
]]>
</param>
<message>${getText("validation.newText.required")}</message>
</field-validator>
</field>
、それをトリミングする必要がある場合、そうでない場合は単純になる可能性があります
<field name="invitation.id">
<field-validator type="required">
<message>${getText("validation.invitation.id.required")}</message>
</field-validator>
</field>
<field name="newText">
<field-validator type="requiredString">
<message>${getText("validation.newText.required")}</message>
</field-validator>
</field>
required
はすべての非テキスト フィールド用であるのに対し、はテキスト フィールド用であることに注意してくださいrequiredString
。
Expression Validator は非常に強力ですが、より複雑な目的で使用する必要があります。
たとえば、アクションから (Getter を介して) 動的に読み取られた別の Date に対して Date を検証する場合。以前にユーザーを選択しており、ページの日付をユーザーの有効期間の開始と終了に対して検証する必要があるとします。ただし、日付が挿入されていない場合は、必要なバリデーターによって既に処理されているため、検証にも合格する必要があります (したがって、2 つのメッセージは発生しません)。
<field name="inputDate">
<field-validator type="required">
<message><![CDATA[ Input Date is mandatory ]]></message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">
<![CDATA[
inputDate==null ||
(inputDate >= chosenUser.startValidity
&&
inputDate <= chosenUser.EndValidity
)
]]>
</param>
<message>
<![CDATA[Input Date must be included in the User Validity interval
(from ${chosenUser.startValidity} to ${chosenUser.endValidity} )
]]>
</message>
</field-validator>
</field>
ここで、chosenUser
は Action の User オブジェクト ( public User getChosenUser()
) で、startValidity と endValidity は User オブジェクトのプロパティ ( public Date getEndValidity()
) です。
ご覧のとおり、動的読み取りはメッセージでも実行できます...これが式バリデーターの強力な方法です;)