Struts2 получает данные из формы в отдельный класс

Это будет немного странный вопрос, и я сделаю все возможное, чтобы объяснить его, но потерпите меня.

У меня есть страница .jsp с формой для ввода информации, страница SubmitAction.java для обработки действия struts и страница Request.java, которая на самом деле является просто контейнером для всех моих данных (она урезана для целей этого вопроса .На самом деле он содержит гораздо больше данных).

Моя основная проблема заключается в том, что я не могу заставить объект запроса узнать о каких-либо данных, которые были введены в NewForm.jsp. Например, при отладке внутри функцииstructInsertStatement() значение myTextBox всегда равно null.

Я опубликую то, что у меня есть, и, надеюсь, кто-то может сказать мне, что мне не хватает.

NewForm.jsp

<html>
<head>
<sx:head />

</head>
<body>

    <s:form action="submitNew" method="post" namespace="/">
        <s:textfield label="Text Box" name="myTextBox" 
        <s:submit label="Submit" name="submit_btn" align="center" />
    </s:form>
</body>
</html>  

Отправить Action.java

    public class SubmitAction extends ActionSupport {

    private Request request = new Request();

    public void executeInsert() throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;       

        try {    
            ps = request.constructInsertStatement();

            // execute the INSERT Statement
            ps.executeUpdate();
        } catch (SQLException e) {

            System.out.println(e.getMessage());

        } catch (Exception e) {

            System.out.println(e.getMessage());

        }finally {

            if (ps != null) {
                ps.close();
            }

            if (conn != null) {
                conn.close();
            }
        }
    }
}

Запрос.java

public class Request {
    private String myTextBox;

    public PreparedStatement constructInsertStatement() throws SQLException{
        PreparedStatement ps = null;
        Connection conn = null;  

        String URL = "myURL";

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        conn = DriverManager.getConnection(URL, "defaultUser", "defaultPassword");

        String sql = "INSERT INTO `myTable` (SomeText)"; 
        sql += "VALUES";
        sql+="(?)";

        ps = conn.prepareStatement(sql);

        try{
            ps.setString(1, myTextBox);

        } catch (SQLException e) {

            System.out.println(e.getMessage());

        } catch (Exception e) {

            System.out.println(e.getMessage());

        }

        return ps;
    }

    public String getmyTextBox() {
        return myTextBox;
    }

    public void setmyTextBox(String myTextBox) {
        this.myTextBox = myTextBox;
    }

Действие Struts.xml

<struts> 
    <package name="default" extends="struts-default" namespace="/">        
        <action name="submitNew"
            class="my.package.path.SubmitAction" method="executeInsert">
            <result name="success">NewForm.jsp</result>
        </action>
    </package>
</struts>

person Zared619    schedule 27.06.2016    source источник


Ответы (1)


Чтобы получить объект Request, у вас должен быть геттер

public Request getMyRequest() { return request; }

Чтобы установить значение для этого объекта, вам нужны действительные геттеры и сеттеры

public String getMyTextBox() {
    return myTextBox;
}

public void setMyTextBox(String myTextBox) {
    this.myTextBox = myTextBox;
}

Если вы хотите узнать больше о том, как OGNL получает доступ к свойствам bean-компонента, см. ответ в случае передачи переменных Struts2.

Чтобы связать этот объект с текстовым полем, вы должны использовать путь к свойству в атрибуте имени.

<s:textfield label="Text Box" name="myRequest.myTextBox" />
person Roman C    schedule 27.06.2016
comment
Я уже определил геттеры и сеттеры в Request.java. Должны ли они быть определены в другом месте? Кроме того, не придется ли мне создавать пустой объект Request внутри класса Request, чтобы иметь для него геттер? - person Zared619; 27.06.2016
comment
Нет, объект создается по умолчанию. - person Roman C; 27.06.2016
comment
Итак, геттер и сеттер, которые у меня изначально были, находятся ли они в правильном месте? - person Zared619; 27.06.2016
comment
У вас не было геттера для request и неправильного геттера и сеттера для свойства Request, но расположение правильное. - person Roman C; 27.06.2016
comment
Вот оно. Большое спасибо. - person Zared619; 27.06.2016