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进行服务器端验证,但我还需要客户端验证。。。