如何在 Struts 2 中将新产品发送到 Action

问题描述

看起来很基本,但我是 Struts2 的新手。

我想发送一个名称、价格和类别创建的新产品。

我使用 struts2 版本 2.5.26、Maven、tomcat 9.0、java jdk 1.8.0_241

看来我用来发送产品的代码错误的,Action中定义的struts.xml无法获取

我发送产品的JSP文件

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<Meta charset="UTF-8">
<title>Nouveau produit</title>
</head>
<body>
<h1>Ajouter un nouveau produit</h1><br><br>
<form action="newProduit.action" method="post">
    <div >
       <s:textfield name="produit.nom" label="Nom " />
    </div><br>
    <div>
       <s:textfield name="produit.prix" class="formH len150" label="Prix " />
    </div><br>
    <div  style="position:relative;">
        <label for="cat" class="formH len150">Catégorie :</label>
        <select id="cat" name="produit.categorie" class="formH len150">
            <option value="">--Choisir--</option>
            <s:iterator  value="categories" var="c">    
                <option value=" ${c.id } " > ${c.nom } </option>
            </s:iterator>           
        </select>
    </div><br>
    <div >
       <s:submit class="btn btn-vert" value="Envoyer" />
    </div><br>
    <div >
       <s:a href="listeProduits.action" class="btn" >Retour liste produits</s:a> 
    </div>
</form>
</body>
</html>

struts.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
   <package name="actionsdiverses" extends="struts-default,json-default" namespace="/actions" >
   <!-- other actions -- >
   <action name="newProduit" method="nvProduit" class="actions.ProduitsAction">         
        <result name="success" type="redirect">listeProduits</result>           
    </action>      
   </package>
</struts>

ProduitsAction.java 文件

package actions;

import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; 
import entities.Produit;
import services.IMetiersBoutiqueFactory;
import services.MetiersBoutiqueFactory;
public class ProduitsAction extends ActionSupport implements ModelDriven{
   private static final long serialVersionUID = 1L;
   private IMetiersBoutiqueFactory services = new MetiersBoutiqueFactory();
   private Produit produit;  

   public String nvProduit() {
      try {
        services.ajouterProduit(produit);
      }catch (Exception e) {
        e.getStackTrace();
      }
      return SUCCESS;
   }    

   // other methods,properties,getters and setters

   public Produit getProduit() {
      return produit;
   }

   public void setProduit(Produit produit) {
      this.produit = produit;
   }    

   @Override
   public Produit getModel() {
      return produit;
   }
}   

发送的错误是:

com.opensymphony.xwork2.config.ConfigurationException: No result defined for action actions.ProduitsAction and result input

我尝试了其他一些解决方案,但我得到的最好的是带有 nom=null,prix=null,categorie=null 的产品。

我想我的问题出在这文件中。 我可能会将其他文件方法发送给您

实体Produit

package entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "produit")
public class Produit {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)  
   private Long id;
   private String nom;
   private Double prix;

   @ManyToOne
   @JoinColumn(name="id_categorie",nullable=true)
   private Categorie categorie;

   public Produit(Long id,String nom,Double prix,Categorie categorie) {
      super();
      this.id = id;
      this.nom = nom;
      this.prix = prix;
      this.categorie = categorie;
   }

   public Produit() {}

   public Long getId() {
      return id;
   }
   public void setId(Long id) {
      this.id = id;
   }
   public String getNom() {
      return nom;
   }
   public void setNom(String nom) {
      this.nom = nom;
   }
   public Double getPrix() {
      return prix;
   }
   public void setPrix(Double prix) {
      this.prix = prix;
   }
   public Categorie getCategorie() {
      return categorie;
   }
   public void setCategorie(Categorie categorie) {
      this.categorie = categorie;
   }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)