struts2验证程序表达式
是否可以进行此条件表达式验证?:struts2验证程序表达式,struts2,Struts2,是否可以进行此条件表达式验证?: (invitation.id==null and (newText==null or newText.isEmpty())) 我试过好几种方法,好几次,但都没有成功。 此版本正在工作,但在服务器端,如果invitation.id为null或为空,请忽略。。。有什么想法吗 <field name="newText"> <field-validator type="fieldexpression"> <param n
(invitation.id==null and (newText==null or newText.isEmpty()))
我试过好几种方法,好几次,但都没有成功。
此版本正在工作,但在服务器端,如果invitation.id为null或为空,请忽略。。。有什么想法吗
<field name="newText">
<field-validator type="fieldexpression">
<param name="expression">!(invitation.id eq null and (newText eq null or newText.empty))</param>
<message>${getText("validation.required")}</message>
</field-validator>
</field>
!(invitation.id eq null和(newText eq null或newText.empty))
${getText(“validation.required”)}
这个表达式有什么问题??谢谢首先,表达式不是有效参数。如果您确实想在客户端进行验证,请尝试使用java脚本或jquery进行验证。但您还必须在服务器端验证输入,因为有时用户可以禁用javascript。因此,在这种情况下,您可以使用struts2-validation
有关详细说明,请参阅好的,最后我使用了客户端验证宽度jquery模拟struts2 出于兼容性的原因,我不喜欢这样做,如果有一种方法可以用标准的方式来做,我将非常感谢您的帮助 删除struts验证:
<!--<field name="newText">
<field-validator type="fieldexpression">
<param name="expression">!((invitation.id==null or invitation.id.empty) and (newText==null or newText.empty))</param>
<message>${getText("validation.required")}</message>
</field-validator>
</field>-->
function mySubmit() {
if ((invitationId==null || invitationId<0) && $("#text").val().trim()=='') {
var trStrutsFieldError='<tr errorfor="text">'+
'<td colspan="2" align="center" valign="top"><span class="errorMessage">'+strValidationRequired+'</span></td>'+
'</tr>';
$(trStrutsFieldError).insertBefore($("#text").parent().parent());
return false;
}
return true;
}
$(document).ready(function(){
$("form").submit(function(event) {
$.each($("form").find("span.errorMessage"), function() { /* <tr errorfor="title"><td colspan="2" align="center"><span classname="errorMessage" class="errorMessage">Campo requerido */
return false;
});
if ($(mySubmit).exists()) {
if (!mySubmit())
return false;
}
return true;
});
});
添加js/jquery代码:
<!--<field name="newText">
<field-validator type="fieldexpression">
<param name="expression">!((invitation.id==null or invitation.id.empty) and (newText==null or newText.empty))</param>
<message>${getText("validation.required")}</message>
</field-validator>
</field>-->
function mySubmit() {
if ((invitationId==null || invitationId<0) && $("#text").val().trim()=='') {
var trStrutsFieldError='<tr errorfor="text">'+
'<td colspan="2" align="center" valign="top"><span class="errorMessage">'+strValidationRequired+'</span></td>'+
'</tr>';
$(trStrutsFieldError).insertBefore($("#text").parent().parent());
return false;
}
return true;
}
$(document).ready(function(){
$("form").submit(function(event) {
$.each($("form").find("span.errorMessage"), function() { /* <tr errorfor="title"><td colspan="2" align="center"><span classname="errorMessage" class="errorMessage">Campo requerido */
return false;
});
if ($(mySubmit).exists()) {
if (!mySubmit())
return false;
}
return true;
});
});
函数mySubmit(){
如果((invitationId==null | | invitationId您的问题是您试图将另一个字段(invitation.id
)验证到newText
字段验证器中(我认为这是不可能的,但我不确定)
但是,您可以将其拆分为两个验证器,将消息correspondent提升到失败案例,这是更正确的imho
${getText(“validation.invitation.id.required”)}
${getText(“validation.newText.required”)}
,如果您需要修剪它,否则它可能会变得简单
${getText(“validation.invitation.id.required”)}
${getText(“validation.newText.required”)}
请注意,required
适用于所有非文本字段,而requiredString
仅适用于文本字段
表达式验证器功能非常强大,但应用于更复杂的用途:
例如,如果要根据另一个日期验证日期,则动态读取(通过Getter)从您的操作中;假设您以前选择了一个用户,您需要根据用户开始和结束有效期间隔验证页面中的日期;但是如果未插入该日期,您也希望通过验证,因为它已由所需的验证程序处理(因此您不会发出两条消息):
=chosenUser.startValidity
&&
输入日期
其中,chosenUser
是操作中的用户对象(public User getChosenUser()
)
startValidity和endValidity是用户对象的属性(public Date getEndValidity()
)
正如您所看到的,动态读取也可以在消息中执行…这就是expression validator的强大功能;)required
validator没有expression
参数。好的,我解决了这个问题。有没有一种方法可以在标准struts中在客户端执行此验证?切换“expression”您是指?第一个还是第二个?无论如何,我修复了que问题并将其更改为fieldexpression。我知道我可以使用javascript和/或jquery,并且我应该在服务器端进行验证。但您没有回答我的问题。嗯,您不能使用struts自定义客户端验证。所以您必须等到apache启动struts2 va客户端的lidation确定,谢谢Arvin,正如您最后看到的,我在这个案例中使用了jquery验证。谢谢Andrea,但我认为这不是一个解决方案。我需要在以下情况下完全无效:(invitation.id==null和(newText==null或newText.isEmpty())然后覆盖验证()方法并从您的操作中执行检查服务器端,无需XMLI allready进行服务器端验证,但我还需要客户端验证。。。