【问题标题】:Saving form data in the database using Struts 2使用 Struts 2 在数据库中保存表单数据
【发布时间】:2016-01-01 21:12:00
【问题描述】:

当我们点击保存按钮时,它必须将表单数据保存在数据库中,但它什么也不做。

下面是代码:

BodyDaywise.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="s" uri="/struts-tags" %>    
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Day Wise</title>
</head>
<body align="center">
    <h1 align="center">Day Wise Form</h1>
        <html:form action="daywise" class="BodyDaywiseAction" method="POST" >
            
            LoginDate: <input type="date" name="LoginDate" displayformat="yyyy-mm-dd" label="Login Date(yyyy-mm-dd)"/><br><br>
            LoginTime:<input id="start" type="time"  name="LoginTime"/><br><br>
            LogoutTime:<input id="end" type="time"  name="LogoutTime"/><br><br>
            Task:<input type="textarea" name="Task" label="Task" cols="20" rows="5"/><br><br>
        
            <input type="submit" value="save" name="Save" onClick=""/>
            <button type="submit" value="Clear" name="clear">Clear</button>
            <input type="button" value="cancel" onClick="history.back();"/>
            </html:form>
</body>
</html>

动作类:BodyDaywiseAction.java:

package com.timesheet.action;
import com.opensymphony.xwork2.ActionSupport;
import com.timesheet.db.DaywiseDBO;
import java.sql.Date;
import java.sql.Time;
public class BodyDaywiseAction extends ActionSupport {
public BodyDaywiseAction()
{
}

private Date LoginDate;
private Time LoginTime;
private Time LogoutTime;
private String Task;

 
public Date getLoginDate() {
    return LoginDate;
}
    
public void setLoginDate(Date LoginDate) {
    this.LoginDate = LoginDate;
}

public Time getLoginTime() {
    return LoginTime;
}

public void setLoginTime(Time LoginTime) {
    this.LoginTime = LoginTime;
}

public Time getLogoutTime() {
    return LogoutTime;
}

public void setLogoutTime(Time LogoutTime) {
    this.LogoutTime = LogoutTime;
}

public String getTask() {
    return Task;
}

public void setTask(String Task) {
    this.Task = Task;
}

    private static final long serialVersionUID = 1L;

 
             
 @Override
public String execute() throws Exception {
    
     int i=DaywiseDBO.save(this);  
    if(i>0){  
    return "success";  
    }  
    return "error";  
}

@Override
public void validate() {
     if("".equals(getTask())){  
        addFieldError("Task", "Task must be filled !");
     }
}

}

DaywiseDBO.java:

package com.timesheet.db;
import com.timesheet.action.BodyDaywiseAction;
import com.timesheet.dbutil.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DaywiseDBO {  

public static int save(BodyDaywiseAction BDA) throws Exception{  
int status=0;  
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
DBUtil util = null;

try{  
util = new DBUtil();
conn = util.getConnection();
ps = conn.prepareStatement("insert into logintable values(?,?,?,?)");  
ps.setDate(1,BDA.getLoginDate());  
ps.setTime(2,BDA.getLoginTime());  
ps.setTime(3,BDA.getLogoutTime());  
ps.setString(4,BDA.getTask());  

status=ps.executeUpdate();  

}catch(Exception e){
e.printStackTrace();}  
return status;  
}  

} 

struts.xml:

<!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="default" extends="struts-default, tiles-default">
    <result-types>
        <result-type name="tiles"
            class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>
    <action name="loginaction" class="com.timesheet.action.LoginAction" method="execute">
        <result name="input" >/Login.jsp</result>
        <result name="success" type="tiles">/bodydaywise.tiles</result>
        <result name="error" type="tiles">/error.jsp</result>
    </action>
    <action name="daywise" class="com.timesheet.action.BodyDaywiseAction">
        <result name="success" type="tiles">/bodydaywisesuccess.tiles</result>
        <result name="error" type="tiles">/error.jsp</result>
    </action>
    </package>
  </struts>

如果我遗漏了什么,请告诉我。

【问题讨论】:

  • 老兄...
  • 你不见了struts.xml
  • @Roman C 请立即检查...我已编辑 Struts.xml
  • 这是什么意思- 但它什么都不做?你有什么错误吗?表格提交了吗?
  • 点击保存按钮后,必须将数据保存到数据库中,并且必须进入成功页面。但它甚至没有进入错误页面或成功页面

标签: java jsp jdbc struts2 struts-tags


【解决方案1】:

您在操作类中使用了错误的日期/时间类型。 Struts2 没有用于java.sql.* 类型的内置转换器。如果您使用java.util.Date,则日期/时间值应转换为日期。这种类型的对象可以包含日期和时间值。

import java.util.Date;
import java.sql.Time;

相应地更改 getter 和 setter 以返回所需的值。您还可以将日期对象设置为Calendar 并进行一些计算,然后您可以从日历中创建一个Timestamp 对象。例如

user.setCreateDate(new Timestamp(Calendar.getInstance().getTimeInMillis()));

在将用户添加到数据库之前将当前的日期和时间设置为用户对象。

使用PreparedStatement的例子:JDBC PreparedStatement example – Insert a record

还有一个示例保存Date 的日期部分:Insert date value in PreparedStatement。 (不要使用它,因为它不会保存Date 的时间部分)。

【讨论】:

  • 感谢罗曼的回复。我已经改变了你所说的,但它仍然是一样的
  • html: 前缀更改为 s: ,最后一个用于您的 taglib 定义并限定 Struts2 标记。
  • 谢谢@Roman 先生...我按照你说的做了,但它应该显示'No result defined for action com.timesheet.action.BodyDaywiseAction and result input' 然后我做了更改在 struts.xml 文件中,通过将结果名称添加为 '/BodyDaywise.jsp' 它从未将任何数据添加到数据库中......我正在使用瓷砖来做这个项目
  • 你正在进步;)
  • 谢谢@roman 先生...你能告诉我为什么它不将数据存储在数据库中吗?
猜你喜欢
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 2021-08-25
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多