My code was working perfectly fine a while ago until my classmate sent a modified HTML file and every single parameter is now null. I don't really know what happened. I'm transferring the information from the form to the servlet and from the servlet, I'm transferring it to the database. Here's the code for the form:
<form method="post" action="informationTransfer">
<div class='row'>
<div class='col-md-6'>
<label for="username">User Name</label>
<input type="text" class="form-control" id="username" placeholder="User Name" name='username' required>
</div>
</div>
<br />
<div class='row'>
<div class='col-md-6'>
<label for="lastName">Last Name</label>
<input type="text" class="form-control" id="lastName" placeholder="Last Name" name='LastName' required>
</div>
<div class='col-md-6'>
<label for="firstName">Name</label>
<input type="text" class="form-control" id="firstName" placeholder="First Name" name='FirstName' required>
</div>
</div>
<br />
<div class='row'>
<div class='col-md-6'>
<label for="lastName">E-Mail</label>
<input type="email" class="form-control" id="email_1" placeholder="E-Mail Address" name='Email' required>
</div>
<div class='col-md-6'>
<label for="firstName">Confirm E-Mail</label>
<input type="email" class="form-control" id="email_2" placeholder="Confirm E-Mail Address" required>
</div>
</div>
<br />
<div class='row'>
<div class='col-md-6'>
<label for="lastName">Password</label>
<input type="password" class="form-control" id="password_1" placeholder="Password" name='Password' required>
</div>
<div class='col-md-6'>
<label for="firstName">Confirm Password</label>
<input type="password" class="form-control" id="password_2" placeholder="Confirm Password" required>
</div>
</div>
<br />
<div class='row'>
<div class='col-md-6'>
<label for='birthDate'>Birthday</label>
<div class="bfh-datepicker" data-max="today" data-close="false" data-date="today" data-format="y-m-d">
<input id="birthDate" type="text" data-name="birthDate" name='Birthdate' style='background-color:white;'>
</div>
</div>
<div class='col-md-6'>
<label for='gender'>Gender</label>
<select class='form-control' name='gender'>
<option>Male</option>
<option>Female</option>
</select>
</div>
</div>
<br />
<div class='row'>
<div class='col-md-4'>
<label for="countries_selectors">Country</label>
<select id="countries_selectors" class="form-control bfh-countries" data-country="PH" name='country' required></select>
</div>
<div class='col-md-4'>
<label for="State">State</label>
<select class="form-control bfh-states" data-country="countries_selectors" id='State' name='State' required></select>
</div>
<div class='col-md-4'>
<label for="zip">Zip Code</label>
<input type="zip" class="form-control" id="zip" placeholder="Zip Code" name='zipcode' required>
</div>
</div>
<br />
<div class='row'>
<div class='col-md-12'>
<label for="address">Home Address</label>
<input type="text" class="form-control" id="address" placeholder="Last Name" name='Address' required>
</select>
</div>
</div>
<br />
<div class='row'>
<div class='col-md-10'>
<label for="phone">Contact Number</label>
<input type="text" class="form-control bfh-phone" data-country="countries_selectors" id="phone" name='PhoneNumber'>
</div>
<div class='col-md-2'>
<label for="signup_b"><br /></label>
<button type="submit" class="btn btn-default center-block" name='signup_b'>Sign Up!</button>
</div>
</div>
</form>
Here's the code for the servlet:
#WebServlet(description = "transfers contents of bean to database", urlPatterns = { "/informationTransfer" })
public class transferInfo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
toDatabase(request, response);
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* #see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
toDatabase(request, response);
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}
private void toDatabase(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, ClassNotFoundException
{
Class.forName("com.mysql.jdbc.Driver");
Connection con;
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/FoundationSystem","root","!Qaz2wsx");
con.setAutoCommit(false);
try
{
PreparedStatement stmt1, stmt2, stmt3;
stmt1 = con.prepareStatement("INSERT INTO AddressInformation (AddressID, Country, ZipCode, State, Address) VALUES (null,?,?,?,?)");
stmt1.setString(1, request.getParameter("country"));
stmt1.setString(2, request.getParameter("zipCode"));
stmt1.setString(3, request.getParameter("state"));
stmt1.setString(4, request.getParameter("address"));
stmt1.executeUpdate();
stmt2 = con.prepareStatement("INSERT INTO AccountDetails VALUES (?,?,?,?,?)");
stmt2.setString(1, request.getParameter("username"));
stmt2.setString(2, request.getParameter("password"));
stmt2.setString(3, null);
stmt2.setString(4, null);
stmt2.setInt(5, 3);
stmt2.executeUpdate();
stmt3 = con.prepareStatement("INSERT INTO PersonalInformation VALUES (?,?,?,?,?,?,?,?)");
Statement address = con.createStatement();
ResultSet result = address.executeQuery("SELECT max(AddressID) FROM AddressInformation");
result.next();
stmt3.setString(1, request.getParameter("userName"));
stmt3.setString(2, request.getParameter("lastName"));
stmt3.setString(3, request.getParameter("firstName"));
stmt3.setString(4, request.getParameter("gender"));
stmt3.setString(5, request.getParameter("birthdate"));
stmt3.setInt(6, result.getInt(1));
stmt3.setString(7, request.getParameter("email"));
stmt3.setString(8, request.getParameter("phoneNumber"));
stmt3.executeUpdate();
con.commit();
//response.sendRedirect();
}
catch (Exception e)
{
con.rollback();
System.out.println(e);
}
}
}
Take care of case here. For eg.
<input type="zip" class="form-control" id="zip" placeholder="Zip Code" name='zipcode' required>
you get this data by
stmt1.setString(2, request.getParameter("zipcode"));
and not
stmt1.setString(2, request.getParameter("zipCode")); // C is capital
name of the input tag in your form should match the parameter name you use in getParameter() method.
Seems name case problem. Match parameter name of your input fields in html file and request.getParameter("fieldName") in your servlet
Related
I can't seem to figure out why I keep getting a 400 bad request. Before I got 400 bad request, the form had "id" instead of "name". When the form had "id" I got 200 but didn't update my database. Now, I get the error and nothing seems to be working.
Here's my controller:
#RequestMapping(value = "/registration", method = RequestMethod.POST)
public String registration(MemberVO vo, Model model) {
System.out.println(vo);
logger.info("regist post...");
logger.info(vo.toString());
try {
mservice.insertMember(vo);
} catch (Exception e) {
e.printStackTrace();
}
return "/register_success";
}
#RequestMapping(value = "/registration", method = RequestMethod.GET)
public void registrationGet(MemberVO vo, Model model) {
}
Here's my form:
<form role = "form" method ="post">
<div class="form-group">
<input type="email" class="form-control" name = "username" placeholder="Email" required/>
<span><i class="fa fa-envelope"></i></span>
</div>
<div class="form-group">
<input type="password" class="form-control" name = "password" placeholder="Password" required/>
<span><i class="fa fa-lock"></i></span>
</div>
<div class="form-group">
<input type="text" class="form-control" name = "firstname" placeholder="firstname" required/>
<span><i class="fa fa-user"></i></span>
</div>
<div class="form-group">
<input type="text" class="form-control" name = "lastname" placeholder="lastname" required/>
<span><i class="fa fa-user"></i></span>
</div>
<div class="form-group">
<input type="text" class="form-control" name = "phonenum" placeholder="Phone Number" required/>
<span><i class="fa fa-user"></i></span>
</div>
<div class="form-group">
<input type="text" class="form-control" name = "birthday" placeholder="Birthday, ex) 1986-06-08" required/>
<span><i class="fa fa-user"></i></span>
</div>
<div class="form-group">
<input type="text" class="form-control" name = "destination" placeholder="where would you like to go?" required/>
<span><i class="fa fa-user"></i></span>
</div>
<button type = "submit" class="btn btn-orange btn-block">Sign Up</button>
</form>
We can not tell you the exact problem as you have not attached your modal class MemberVO but you can check below.
1.There is no action attribute in your form.
2.Ensure that all the fields present in Modal class should also be present in the form with the same name.
I am trying to display the user profile details when user click on the profile link. I am using eclipse. Also using mvc architecture. No errors occuring but data is not displaying in the jsp file.
CustomerProfileController servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String name = request.getParameter("name");
CustomerViewQuery cvq = new CustomerViewQuery(name);
try {
List<Customer> customers = cvq.list();
request.setAttribute("customers", customers); // Will be available as ${products} in JSP
request.getRequestDispatcher("CustomerProfile.jsp").forward(request, response);
} catch (SQLException e) {
throw new ServletException("Cannot obtain vehicles from DB", e);
}
}
CustomerViewQuery file
package dbhelpers;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import models.Customer;
public class CustomerViewQuery {
DBConnection databaseCon = new DBConnection();
String uName;
public CustomerViewQuery(String name) {
this.uName = name;
}
public List<Customer> list() throws SQLException {
List<Customer> customers = new ArrayList<Customer>();
try (
Connection con = databaseCon.dbconnect();
PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username='\"+uName+\"'");
ResultSet resultSet = pst.executeQuery();
) {
while (resultSet.next()) {
Customer customer = new Customer();
customer.setId(resultSet.getInt("id"));
customer.setName(resultSet.getString("name"));
customer.setEmail(resultSet.getString("email"));
customer.setAddress(resultSet.getString("address"));
customer.setSex(resultSet.getString("sex"));
customer.setBday(resultSet.getString("bday"));
customer.setTelephone(resultSet.getString("telephone"));
customer.setUsername(resultSet.getString("username"));
customer.setPassword(resultSet.getString("password"));
customers.add(customer);
}
}catch(SQLException e) {
e.printStackTrace();
}
return customers;
}
}
Getters and Setters are in the Customer.java file
I get no errors but also nothing is displaying in the CustomerProfile.jsp file. Here is the code
<%# taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach items="${customers}" var="customer">
</c:forEach>
<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" name="name" value="${customer.name}" placeholder="Name">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" name="email" value="${customer.email}" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Address</label>
<div class="col-sm-10">
<input type="text" name="address" value="${customer.address}" placeholder="Address">
</div>
</div>
<div class="form-group row">
<label for="sex" class="col-sm-2 col-form-label">Sex</label>
<div class="col-sm-10">
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Male</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline2" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Female</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="birthdate" class="col-sm-2 col-form-label">Birthdate</label>
<div class="col-sm-10">
<input type="date" name="bday" value="${customer.bday}" placeholder="Birthdate" required>
</div>
</div>
<div class="form-group row">
<label for="telephone" class="col-sm-2 col-form-label">Telephone</label>
<div class="col-sm-10">
<input type="text" name="tele" value="${customer.telephone}" placeholder="Telephone">
</div>
</div>
<div class="form-group row">
<label for="username" class="col-sm-2 col-form-label">Username</label>
<div class="col-sm-10">
<input type="text" name="username" value="${customer.username}" placeholder="Username">
</div>
</div>
<div class="form-group row">
<label for="passowrd" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" value="${customer.password}" id="inputPassword" placeholder="Password" data-minlength="6">
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block btn-large">Sign me up.</button>
</form><br>
</div>
Here i changed some things with your code. It should work now. Let me know.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
CustomerViewQuery cvq = new CustomerViewQuery();
try {
List<Customer> customers = cvq.list(name);
request.setAttribute("customers", customers);
request.getRequestDispatcher("CustomerProfile.jsp").forward(request, response);
} catch (SQLException e) {
throw new ServletException("Cannot obtain vehicles from DB", e);
}
}
Some changes here too:
public class CustomerViewQuery {
public List<Customer> list(String name) throws SQLException {
List<Customer> customers = new ArrayList<Customer>();
//get connection like this
try(Connection con = DBConnection.dbconnect()) {
PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username=?;");
pst.setString(1, name); //set name like this (The '1' means first occurance of a question mark '?')
ResultSet resultSet = pst.executeQuery();
while (resultSet.next()) {
Customer customer = new Customer();
customer.setId(resultSet.getInt("id"));
customer.setName(resultSet.getString("name"));
customer.setEmail(resultSet.getString("email"));
customer.setAddress(resultSet.getString("address"));
customer.setSex(resultSet.getString("sex"));
customer.setBday(resultSet.getString("bday"));
customer.setTelephone(resultSet.getString("telephone"));
customer.setUsername(resultSet.getString("username"));
customer.setPassword(resultSet.getString("password"));
customers.add(customer);
}
}catch(SQLException e) {
e.printStackTrace();
}
return customers;
}
}
your forEach JSTL tag was not iterating over anything...
<%# taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach items="${customers}" var="customer">
<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" name="name" value="${customer.name}" placeholder="Name">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" name="email" value="${customer.email}" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Address</label>
<div class="col-sm-10">
<input type="text" name="address" value="${customer.address}" placeholder="Address">
</div>
</div>
<div class="form-group row">
<label for="sex" class="col-sm-2 col-form-label">Sex</label>
<div class="col-sm-10">
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Male</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline2" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Female</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="birthdate" class="col-sm-2 col-form-label">Birthdate</label>
<div class="col-sm-10">
<input type="date" name="bday" value="${customer.bday}" placeholder="Birthdate" required>
</div>
</div>
<div class="form-group row">
<label for="telephone" class="col-sm-2 col-form-label">Telephone</label>
<div class="col-sm-10">
<input type="text" name="tele" value="${customer.telephone}" placeholder="Telephone">
</div>
</div>
<div class="form-group row">
<label for="username" class="col-sm-2 col-form-label">Username</label>
<div class="col-sm-10">
<input type="text" name="username" value="${customer.username}" placeholder="Username">
</div>
</div>
<div class="form-group row">
<label for="passowrd" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" value="${customer.password}" id="inputPassword" placeholder="Password" data-minlength="6">
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block btn-large">Sign me up.</button>
</form><br>
</div>
</c:forEach>
EDIT: Here's how you can do it without a loop:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
CustomerViewQuery cvq = new CustomerViewQuery();
try {
//not list required this time, created a new method called 'getCustomer'
Customer customer = cvq.getCustomer(name);
request.setAttribute("customer", customer);
request.getRequestDispatcher("CustomerProfile.jsp").forward(request, response);
} catch (SQLException e) {
throw new ServletException("Cannot obtain vehicles from DB", e);
}
}
new method in your CustomerViewQuery Class called 'getCustomer'
public class CustomerViewQuery {
public Customer getCustomer(String name) throws SQLException {
Customer customer = new Customer();
try(Connection con = DBConnection.dbconnect()) {
PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username=?;");
pst.setString(1, name); //set name like this (The '1' means first occurance of a question mark '?')
ResultSet resultSet = pst.executeQuery();
while (resultSet.next()) {
customer.setId(resultSet.getInt("id"));
customer.setName(resultSet.getString("name"));
customer.setEmail(resultSet.getString("email"));
customer.setAddress(resultSet.getString("address"));
customer.setSex(resultSet.getString("sex"));
customer.setBday(resultSet.getString("bday"));
customer.setTelephone(resultSet.getString("telephone"));
customer.setUsername(resultSet.getString("username"));
customer.setPassword(resultSet.getString("password"));
}
}catch(SQLException e) {
e.printStackTrace();
}
return customer;
}
}
no changes here except removed the JSTL forEach tag as it is not needed anymore.
<%# taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" name="name" value="${customer.name}" placeholder="Name">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" name="email" value="${customer.email}" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Address</label>
<div class="col-sm-10">
<input type="text" name="address" value="${customer.address}" placeholder="Address">
</div>
</div>
<div class="form-group row">
<label for="sex" class="col-sm-2 col-form-label">Sex</label>
<div class="col-sm-10">
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Male</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline2" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Female</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="birthdate" class="col-sm-2 col-form-label">Birthdate</label>
<div class="col-sm-10">
<input type="date" name="bday" value="${customer.bday}" placeholder="Birthdate" required>
</div>
</div>
<div class="form-group row">
<label for="telephone" class="col-sm-2 col-form-label">Telephone</label>
<div class="col-sm-10">
<input type="text" name="tele" value="${customer.telephone}" placeholder="Telephone">
</div>
</div>
<div class="form-group row">
<label for="username" class="col-sm-2 col-form-label">Username</label>
<div class="col-sm-10">
<input type="text" name="username" value="${customer.username}" placeholder="Username">
</div>
</div>
<div class="form-group row">
<label for="passowrd" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" value="${customer.password}" id="inputPassword" placeholder="Password" data-minlength="6">
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block btn-large">Sign me up.</button>
</form><br>
</div>
I encountered this issue on uploading image file. It say's that there is something part is missing and I have no idea. I have searched so many things already but still I couldn't find a solution. I'm trying to insert it in database and store the file in my project directory. It's seems I have missed something.
here is my html:
<form autocomplete="off" th:action="#{/AddCriminal}"
enctype="multipart/form-data" method="post" class="m-t" role="form"
th:object="${criminalRec}" data-toggle="validator">
<h1 class="text-white">Add Criminal</h1>
<div th:if="${info}" class="alert alert-success" role="alert"
th:text=${info}></div>
<div th:if="${infoError}" class="alert alert-danger" role="alert"
th:text="${infoError}"></div>
<div class="row text-center">
<div class="col-md-5">
<div th:if="${#fields.hasErrors('name')}" th:errors="*{name}"
class="validation-message alert alert-danger" role="alert"></div>
<div th:if="${#fields.hasErrors('seq_number')}"
th:errors="*{seq_number}"
class="validation-message alert alert-danger" role="alert"></div>
<div th:if="${#fields.hasErrors('comments')}"
th:errors="*{comments}"
class="validation-message alert alert-danger" role="alert"></div>
<div class="form-group">
<label class="text-white">Full Name: </label> <input type="text"
th:field="*{name}" placeholder="Wanted Full name"
class="form-control" required /> <small id="firstnameHelp"
class="form-text text-muted text-white">Full name of the
person</small>
</div>
<div class="form-group">
<label class="text-white">Sequence Number: </label> <input
type="text" th:field="*{seq_number}"
placeholder="Sequence Number" class="form-control" required /> <small
id="firstnameHelp" class="form-text text-muted text-white">Sequence
of the records the Ascending order</small>
</div>
<div class="form-group">
<label class="text-white">Photo: </label> <!-- <input type="file"
th:field="*{photo}" placeholder="Add Photo" class="form-control"
accept="image/*" required /> -->
<input type="file" name="photo" accept="image/*" class="form-control" />
<small id="firstnameHelp" class="form-text text-muted text-white">Upload
Photo</small>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<textarea class="form-control" th:field="*{comments}"
placeholder="Facts" rows="3" required></textarea>
<small id="firstnameHelp" class="form-text text-muted text-white">Facts
about this criminal</small>
</div>
</div>
<div class="col-md-5">
<button type="submit" class="btn btn-primary block full-width m-b">Add
Criminal</button>
</div>
</div>
</form>
my controller:
#RequestMapping(value = "/AddCriminal", method = RequestMethod.POST, consumes = "multipart/form-data")
public ModelAndView processCriminal(ModelAndView modelAndView,
#Valid #ModelAttribute("criminalRec") Criminals criminalRec, #RequestParam("photo") MultipartFile file,
BindingResult bindingResult, HttpServletRequest request)
throws SerialException, SQLException, IOException {
if (bindingResult.hasErrors()) {
modelAndView.setViewName("/admin/addwantedperson");
} else {
storageService.store(file);
System.out.println("FILENAME: " + storageService.getFName());
byte [] byteArr=file.getBytes();
Blob blob = new SerialBlob(byteArr);
criminalRec.setPhoto(blob);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.now();
criminalRec.setDate_added(formatter.format(localDate));
criminalService.saveCriminal(criminalRec);
modelAndView.addObject("info", "Criminal Record Successfully Added!");
modelAndView.addObject("criminalRec", new Criminals());
modelAndView.setViewName("/admin/addwantedperson");
}
return modelAndView;
}
In your Application Properties add spring.http.multipart.enabled=true
I have implemented a registration process where you can send user data to the controller via post request.
The post request works fine, however now I want to pass another value (role, Long) from the form to the controller that is not an attribute of the user model.
That part is not working.
Does anyone know why?
HTML:
<form action="add_user" method="post" class="form-horizontal" th:object="${user}">
<div class="form-group">
<div class="col-sm-offset-1 col-sm-10">
<input th:field="*{username}" class="form-control" placeholder="Person ID" type="text" name="id" id="id"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-10">
<input th:field="*{firstName}" class="form-control" placeholder="First Name" type="text" name="firstname" id="firstname"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-10">
<input th:field="*{lastName}" class="form-control" placeholder="Last Name" type="text" name="lastname" id="lastname"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-10">
<input th:field="*{password}" class="form-control" placeholder="Password" type="password" name="password" id="password"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-10">
<select th:field="${role}" class="form-control" id="role">
<option value="1">Admin</option>
<option value="2" >User</option>
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-1 col-sm-10">
<button type="submit" class="btn btn-success" value="Submit">Save</button>
</div>
</div>
</form>
Controller:
#RequestMapping(value = "/users", method = RequestMethod.GET)
public String showUsers(Model model)
model.addAttribute("user", new User());
model.addAttribute("role", new Long(2));
return "users";
}
And:
#RequestMapping(value = "/add_user", method = RequestMethod.POST)
public String handleNewUser(#ModelAttribute("user") User user, BindingResult bindingResult, Model model, long role) {
if (user != null) {
System.out.println(role);
userService.save(user);
}
return "redirect:/users";
}
th:field="${role}" means name of field in the model object, not its value. You probably want to write th:value="${role}" instead of this.
<%#include file="../header.jsp" %>
<h1>Add Room</h1>
<form action="save" method="post" enctype="multipart/form-data">
<div class="form-group">
<label>Room Type</label>
<input type="text" name="roomType" placeholder="Enter Room Type" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>Room Description</label>
<input type="text" name="roomDescription" placeholder="Enter Room Description" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>Room Number</label>
<input type="number" name="roomNumber" placeholder="Enter Room Number" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>Room Image</label>
<input type="file" name="file" placeholder="Select Room Image" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>Room Image</label>
<input type="hidden" name="ro_id" value="${Room.ro_id}" placeholder="Select Room Image" required="required" class="form-control"/>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success" value="submit">Save</button>
</div>
</form>
<%#include file="../footer.jsp" %>
Here is my edit jsp from where I update my database
Edit Room Jsp for updating for database using Room controller and I get
"Column Image"cannot be null
<%#include file="../header.jsp" %>
<h1>Edit Room</h1>
<form action="${SITE_URL}/admin/room/save" method="post" enctype="multipart/form-data">
<div class="form-group">
<label>Room Type</label>
<input type="text" name="roomType" value="${Room.room_type}" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>Room Description</label>
<input type="text" name="roomDescription" value="${Room.room_description}" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>Room Number</label>
<input type="number" name="roomNumber" value="${Room.room_number}" required="required" class="form-control"/>
</div>
<div class="form-group">
<label>Room Image</label>
<input type="file" name="file" link src="D:/Hotels/uploadedImage/${Room.image}" required="required" class="form-control" />
</div>
<form:hidden path="${Room.ro_id}" />
<input type="text" value="${Room.ro_id}" name="id"/>
<div class="form-group">
<button type="submit" class="btn btn-success" value="editroom/ro_id" >Save</button>
</div>
</form>
<%#include file="../footer.jsp" %>
When I try to update the page i get Column"image" cannot be null
and when I try to add it "Required int parameter #id is not present
/**
*
* #author
*/
#Controller
#RequestMapping(value = "/admin/room")
public class Roomcontroller {
#Autowired
private RoomService roomService;
#RequestMapping(method = RequestMethod.GET)
public String index(ModelMap map) throws SQLException {
map.addAttribute("Room", roomService.getAll());
return "admin/room/index";
}
#RequestMapping(value = "/addroom", method = RequestMethod.GET)
public String addRoom() throws SQLException {
return "admin/room/addroom";
}
#RequestMapping( value = "/editroom/{ro_id}", method = RequestMethod.GET )
public #ResponseBody ModelAndView edit(#PathVariable("ro_id") int ro_id) throws SQLException {
ModelAndView mv = new ModelAndView("admin/room/editroom");
mv.addObject("Room", roomService.getById(ro_id));
return mv;
}
#RequestMapping(value = "/deleteroom/{ro_id}", method = RequestMethod.GET)
public String delete(#PathVariable("ro_id") int ro_id) throws SQLException {
roomService.delete(ro_id);
return "redirect:/admin/room";
}
#RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(#RequestParam("roomType") String roomType,#RequestParam("id") int id,
#RequestParam("roomDescription") String roomDescription, #RequestParam("roomNumber") int roomNumber
,#RequestParam("file") MultipartFile multipartFile,HttpServletRequest req) throws SQLException, IOException {
Room attributes
Room room = new Room();
room.setRo_id(id);`
room.setRoom_type(roomType);
room.setRoom_description(roomDescription);
room.setRoom_number(roomNumber);
// TO DO : Save room, fetch the id of saved room and set it through
// setter in above object.
System.out.println(room.getRo_id());
if(room.getRo_id()==0){
System.out.println(room.getRo_id());
String serverRootPath = req.getServletContext().getRealPath("");
System.out.println(serverRootPath);
// You can change the directory.
File roomImageDirectory = new File("D:\\Hotels\\uploadedImages");
if (!roomImageDirectory.exists()) {
roomImageDirectory.mkdirs();
}
String[] fileNameToken = multipartFile.getOriginalFilename().split("\\.");
// You can change file name to be saved.
String newFileName = "room-" + room.getRoom_number() + "." + fileNameToken[fileNameToken.length - 1];
File roomImage = new File(roomImageDirectory, "/" + newFileName);
roomImage.createNewFile();
multipartFile.transferTo(roomImage);
room.setImage(newFileName);
roomService.insert(room);
}
else
{
roomService.update(room);
}
return "redirect:/admin/room";
}
}