Java struts 2验证未正确重新填充下拉列表

Java struts 2验证未正确重新填充下拉列表,java,struts2,Java,Struts2,我已经在这里查看了以前的文章,我似乎找不到我的问题,它是如何设置的。我的控件在初始加载时填充,但在验证失败时不填充。如果我转到索引页,它可以加载,如果我转到strutsxml文件中定义的操作,它就可以加载。唯一的问题是在验证重新加载之后 从jsp文件中删除相关部分 <s:form action="CreateReq" method="post" validation="true" theme="simple"> <s:select name="measurementLi

我已经在这里查看了以前的文章,我似乎找不到我的问题,它是如何设置的。我的控件在初始加载时填充,但在验证失败时不填充。如果我转到索引页,它可以加载,如果我转到strutsxml文件中定义的操作,它就可以加载。唯一的问题是在验证重新加载之后

从jsp文件中删除相关部分

<s:form action="CreateReq" method="post" validation="true" theme="simple">
    <s:select name="measurementList" 
              list="measurementList" 
              listKey="Name" listValue="Id" 
              class="quantitydropdown">
    </s:select>
</s:form>
PrepareCreateRequisitionAction类

public ArrayList<Measurement> getMeasurementList() {
    if (measurementList==null || measurementList.isEmpty()){
    this.createMeasurementList();   
    }

    return measurementList;
}

private void createMeasurementList() {
measurementList = new ArrayList<Measurement>();

measurementList.add(new Measurement("Bag", "Bag"));
measurementList.add(new Measurement("Box", "Box"));
measurementList.add(new Measurement("Cubic decimeter", "Cubic decimeter"));
}
public ArrayList getMeasurementList(){
if(measurementList==null | | measurementList.isEmpty()){
this.createMeasurementList();
}
返回测量列表;
}
私有void createMeasurementList(){
measurementList=新的ArrayList();
添加(新测量(“袋”、“袋”));
添加(新测量(“框”、“框”));
添加(新的测量(“立方分米”、“立方分米”);
}
index.jsp

<head>
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=CreateReq.action">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>HTML 5 with Struts 2</title>
</head>

HTML5与Struts2
struts.xml

<action name="CreateReq" method="execute" class="com.te.sss.action.CreateRequisitionAction">
  <result name="success">/success.jsp</result>
  <result name="input">/createRequisition.jsp</result>
</action>

/success.jsp
/createrequision.jsp
  • 在web.xml中,您使用的是FilterDispatcher,这已被弃用
  • 在struts.xml(github项目上)中,处理的唯一结果是
    input
    。在这里,您还编写了
    success
    result的规则。如果真正的代码是github上的代码,那么您的代码只有在验证失败的情况下才能工作。。。仔细检查您的设置

  • 请注意,您不需要从您的操作中实例化另一个操作;为此使用Pojo。

    操作
    是否实现了Prepareable
    ?诸如此类的事情很重要。另外,不要指定
    execute
    方法;这是默认值。是的,它确实实现了Preparable。我指定了execute,因为我将在将来更改它,因为它将有多个操作。请创建一个失败最少的示例,并将其放在github上。顺便说一句,这很难理解;实例化一个操作只是为了获得一些服务级别功能是非常不寻常的,从
    prepareXxx
    方法返回值也是如此。很抱歉,我应该先这样做。我真的没想到我的帖子会这么久,直到我快写完了。代码看起来不错,尽管设计并不像Dave建议的那样好。1.
    LoadWaitingRequisitions()
    此方法的作用是什么?2.启用struts2 devMode以查看更多日志。我在真正的应用程序中确实有该筛选器。我做了改变只是为了确保它不会影响行为。另外,git上的应用程序不是真正的应用程序,Dave要求提供一个最低失败率的应用程序,所以我拿出了不需要的应用程序。
    <action name="CreateReq" method="execute" class="com.te.sss.action.CreateRequisitionAction">
      <result name="success">/success.jsp</result>
      <result name="input">/createRequisition.jsp</result>
    </action>