Невозможно преобразовать ActionForm в AddExpenseForm - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в Struts, я пытаюсь понять, как все это работает. Я понимаю, что мне нужно создать форму для доступа к параметрам запроса в классе действий, и я также ссылался на различные другие форумы, пытаясь выяснить ответ, но это бесполезно. Я получаю одну и ту же ошибку, что бы я ни пытался. Заранее спасибо.

Мой класс действий:

package action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;

import com.opensymphony.xwork2.ActionSupport;

import dao.ExpenseDAO;
import dao.MemoryExpenseDAO;
import forms.AddExpenseForm;
import value.Expense;

public class AddExpenseAction extends ActionSupport{
    private static final long serialVersionUID = 1L;

    public String execute(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception{



     {
            AddExpenseForm addExpenseForm = (AddExpenseForm) form;

            Expense e = new Expense();
            e.setAmount(addExpenseForm.getAmount());
            e.setDate(addExpenseForm.getDate());
            e.setReason(addExpenseForm.getReason());

            ExpenseDAO dao = MemoryExpenseDAO.getDAO();              
            dao.insertExpense(e);

            HttpSession session = request.getSession();                
            session.setAttribute("expense", e);
            return SUCCESS;


        }
        }
      }

Моя форма:

package forms;

public class AddExpenseForm {

    private String date;
    private Double amount;
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public Double getAmount() {
        return amount;
    }
    public void setAmount(Double amount) {
        this.amount = amount;
    }
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
     private String reason;
   }

Моя конфигурация Struts:

    <?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-config>
     <form-beans>
        <form-bean name="AddExpenseForm" type="forms.AddExpenseForm"/>
        <form-bean name="FindExpenseByDate" type="forms.FindExpenseByDate"/>
     </form-beans>
     <action-mapping>
        <action name="AddExpenseAction" class="action.AddExpenseAction">
            <result name="success">/DisplayExpenses.jsp</result> 
            <result name="error">/error.jsp</result>
        </action>
        <action name="FindExpensesAByDate" class="action.FindExpensesAByDate">
            <result name="success">/FindExpensesByDate.jsp</result>
            <result name="error">/error.jsp</result> 
        </action>
     </action-mapping>]]
</struts-config>

введите здесь описание изображения

Также у меня есть еще одно сомнение по поводу моего файла конфигурации struts, почему я не могу использовать переадресацию, как показано в приведенном ниже коде. Я прикрепил ошибку к изображению, говоря, что "Тип атрибута" должен быть объявлен для типа элемента "действие". "

 <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>

    <!-- Data Sources -->
    <data-sources>
    </data-sources>

    <!-- Form Beans -->
    <form-beans>
        <form-bean name="AddExpenseForm" type="forms.AddExpenseForm">
        </form-bean>
        <form-bean name="FindExpensesByDateForm" type="forms.FindExpensesByDateForm">
        </form-bean>
    </form-beans>

    <!-- Global Exceptions -->
    <global-exceptions>
    </global-exceptions>

    <!-- Global Forwards -->
    <global-forwards>
    </global-forwards>

    <!-- Action Mappings -->
    <action-mappings>
        <action name="AddExpenseForm" path="/AddExpense" type="actions.AddExpenseAction">
            <forward name="success" path="/DisplayExpense.jsp">
            </forward>
        </action>

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Сделайте это

import org.apache.struts.action.ActionForm;
public class AddExpenseForm extends ActionForm {

    private String date;
    private Double amount;
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public Double getAmount() {
        return amount;
    }
    public void setAmount(Double amount) {
        this.amount = amount;
    }
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
     private String reason;
   }

И, пожалуйста, посмотрите на это Наследование и приведение в Java

0 голосов
/ 07 мая 2020

Ваш AddExpenseForm класс не расширяет ActionForm.

Относительно несвязанного вопроса конфигурации:

actions.AddExpenseAction не существует. Это не тот пакет, в котором вы его объявили.


Несвязанный:

Если у вас нет очень конкретной c причины для изучения Struts 1, не делайте этого.

Стойки 1 были допущены к концу года go и не должны использоваться ни для чего нового.

...