【问题标题】:Struts delete action setters not called [duplicate]Struts删除未调用的动作设置器[重复]
【发布时间】:2017-12-21 22:18:05
【问题描述】:

我有一个像这样的 Struts 动作类:

public class OrderDetailAction extends BaseActionSupport {

   private String ID = new OID().toString();
   private Collection<OrderDetail> orderdetailList;
   private String orderStatus;
   private String shippingAddressId;
   private java.util.Date createdDate;
   private java.util.Date updatedDate;
   private String billingAddressId;

   public void setOrderStatus(String orderStatus) {
        this.orderStatus = orderStatus;
   }

   public String getOrderStatus() {
       return orderStatus;
   }

   public void setShippingAddressId(String shippingAddressId) {
      this.shippingAddressId = shippingAddressId;
   }

   public String getShippingAddressId() {
        return shippingAddressId;
   }
   public void setCreatedDate(java.util.Date createdDate) {
       this.createdDate = createdDate;
   }

   public java.util.Date getCreatedDate() {
       return createdDate;
   }
   public void setUpdatedDate(java.util.Date updatedDate) {
       this.updatedDate = updatedDate;
   }

   public java.util.Date getUpdatedDate() {
       return updatedDate;
   }
   public void setBillingAddressId(String billingAddressId) {
       this.billingAddressId = billingAddressId;
   }

   public String getBillingAddressId() {
       return billingAddressId;
   }
   public String getID() {
       return ID;
   }   

   public void setID(String ID) {
        this.ID = ID;
   }

   public Collection<OrderDetail> getOrderDetailList() {
       return orderdetailList;
   }

   public void setOrderDetailList(Collection<OrderDetail> orderdetailList) {
       this.orderdetailList = orderdetailList;
   }

   // some more logic
}

每当我运行创建操作、显示操作或编辑操作时,struts 都会调用所有设置器。但是,当我运行 delete action 时,struts 无法调用除 setID() 之外的所有设置器。

发生这种情况有什么原因吗?

这是我的struts.xml供参考:

<struts>
       // some other stuff here
        
        <action name="getOrderDetails" class="presentation.OrderDetailAction" method="getOrderDetails">
            <result name="success">OrderDetailList.jsp</result>
        </action>

        <action name="displayOrderDetail" class="presentation.OrderDetailAction" method='displayOrderDetail'>
            <result name="success">OrderDetail.jsp</result>
        </action>
        
        <action name="displayCreateOrderDetail" class="presentation.OrderDetailAction" method='displayCreate'>
            <result name="success">CreateOrderDetail.jsp</result>
        </action>

        <action name="createOrderDetail" class="presentation.OrderDetailAction" method='create'>
            <result name="success" type="chain">getOrderDetails</result>
            <result name="input">CreateOrderDetail.jsp</result>
            <result name="error">CreateOrderDetail.jsp</result>
        </action>   

        <action name="displayEditOrderDetail" class="presentation.OrderDetailAction" method='displayUpdate'>
            <result name="success">EditOrderDetail.jsp</result>
        </action>

        <action name="editOrderDetail" class="presentation.OrderDetailAction" method='update'>
            <result name="success" type="chain">getOrderDetails</result>
            <result name="input">EditOrderDetail.jsp</result>
            <result name="error">EditOrderDetail.jsp</result>
        </action>
        
        <action name="deleteOrderDetail" class="presentation.OrderDetailAction" method='delete'>
            <result name="success" type="chain">getOrderDetails</result>
        </action>
// some more stuff here
</sturts>

JSP 中的输入看起来也没有区别:

    <input name="action:displayEditOrderDetail"  class="btn btn-success" value="Edit" type="submit" id="displayOrderDetail_displayEditOrderDetail"/>
    <input name="action:deleteOrderDetail" class="btn btn-danger" value="Delete" type="submit" id="displayOrderDetail_deleteOrderDetail"/>
    <input name="action:getOrderDetails" class="btn btn-default" value="Cancel" type="submit" id="displayOrderDetail_getOrderDetails"/>

对于每个其他的 CRUD 操作,Struts 都会成功调用所有的 setter。除了只调用setID() 的Delete 情况。我应该为 Delete 做些什么不同的事情吗?

【问题讨论】:

  • 您确定其他参数已发布到 struts 操作?!您是否使用 Firefox 开发工具(或其他类似工具)检查了您的响应

标签: java jsp struts2


【解决方案1】:

删除一个对象后你应该返回redirectAction结果。

<result name="success" type="redirectAction">getOrderDetails</result>

【讨论】:

  • 不幸的是,它仍然出错。除了setID() 之外,没有一个设置器被调用。是否有只调用 ID 设置器进行删除的 struts 标准?
  • 当您调用删除操作时,不需要其他参数。您需要像往常一样处理该操作并将重定向返回到下一个操作。如果您仍然发送多个参数,那么您应该重新考虑请求的类型。可能 GET 更适合这种操作。
猜你喜欢
  • 2013-09-04
  • 1970-01-01
  • 2020-11-02
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
相关资源
最近更新 更多