Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java addFieldError中的错误带有<;选择>;在Struts2中_Java_Jsp_Struts2 - Fatal编程技术网

Java addFieldError中的错误带有<;选择>;在Struts2中

Java addFieldError中的错误带有<;选择>;在Struts2中,java,jsp,struts2,Java,Jsp,Struts2,我是Struts2新手,尝试在我的表单中使用带有标记的addFieldError。 我有一个表单,其中我必须从下拉列表中选择一个值。第一次显示此表单时,响应来自Action类,我在其中创建了一个列表。在我的表单中,我使用标记以下拉方式打印该列表,如下所示: <result name="input" type="redirect">link.action</result> 选择要添加案例的客户端: “pageinclude=ancar”打印此表单 struts.xm

我是Struts2新手,尝试在我的表单中使用带有
标记的
addFieldError
。 我有一个表单,其中我必须从下拉列表中选择一个值。第一次显示此表单时,响应来自Action类,我在其中创建了一个列表。在我的表单中,我使用
标记以下拉方式打印该列表,如下所示:

<result name="input"  type="redirect">link.action</result>

选择要添加案例的客户端:
“pageinclude=ancar”打印此表单

struts.xml


user.jsp?pageinclude=ncr
jsp?pageinclude=erracar
jsp?pageinclude=ancar
jsp?pageinclude=relogin
在JudicialCaseRegisterValidation.java中

public void validate()
{       
if(client==null | | client.equals(“-1”))
addFieldError(“客户端”,“此字段不能为空”);
}
一切正常。满足错误条件,结果我得到“输入”。也正在打印错误消息,但下拉列表中的值已消失。列表打印为空。因为这次响应不是来自设置列表的Action类

然后我更改了struts.xml,将请求从
发送到Action类,如下所示:

<result name="input"  type="redirect">link.action</result>
link.action
“link.action”是在action类中发送请求以创建列表并打印表单的内容

但是这一次表单只是再次打印&没有打印错误消息

我想再次打印该列表,以及除此之外的错误消息。请告诉我怎么做。?

我认为type=“redirectAction”可以重定向到特定的操作

像这样的

链接

希望有帮助

如果我是正确的,或者在返回该操作结果的任何地方,都可以在execute()方法中设置它

list=setList(newList);

return result;

几乎每个从Struts2开始的人都会遇到这个问题,很快或者很晚

在Struts2中请求操作时,您的请求将通过(拦截器列表);每个拦截器所做的都是特定的业务,然后重定向请求(在出现错误的情况下)或继续执行到下一个拦截器,或者执行到最后一个拦截器的操作

验证由验证拦截器执行。如果验证失败,它将劫持请求并将其重定向到struts.xml中定义的输入结果。无论验证是通过XML、通过注释进行的,还是在操作内部的验证()方法中进行的:操作未到达然后,
execute()
方法或您正在调用的方法(如果您使用的是自定义方法)中的所有内容都不会执行

如果需要将列表元素加载到
execute()
方法,则在出现输入结果的情况下,不会执行加载

避免此问题的主要方法是:

  • 实现,并将所有数据加载内容放入prepare()方法。
    该方法由置于验证拦截器之前的准备拦截器运行;
    无论您调用的是哪种操作方法(
    execute()
    或其他方法),也无论您是否遇到验证错误,它都将始终运行,并且将在验证之前运行

  • 使用JSP中的
    标记,调用返回JSP片段的伪操作

  • 在执行
    execute()
    (或其他)方法时,使用
    redirectAction
    作为输入结果类型
    重定向时,它将丢失所有请求参数(包括操作错误、字段错误、操作消息等),然后您需要通过在struts.xml中将它们声明为
    重定向操作
    结果的参数来手动复制它们

  • 第一种方式是首选,imho

    编辑:


    刚刚在官方文件中也找到了:

    我试过那个脉轮。在这种情况下,不会打印错误消息。我需要错误消息和下拉列表。我正在JudicialCaseRegisterValidation.java中使用setter方法。问题是,当出现错误或者我选择空白时,这个类就不会执行。这就是为什么不打印该列表的原因。您只需在方法execute中返回结果(如success/error/input等)之前设置该列表,这样您就可以使用struts标记在user.jsp中检索这些结果。感谢Andrea的提示。你也能回答吗。。?