Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编辑方法引发空指针异常删除方法不工作_Java_Jsp_Spring Mvc - Fatal编程技术网

Java 编辑方法引发空指针异常删除方法不工作

Java 编辑方法引发空指针异常删除方法不工作,java,jsp,spring-mvc,Java,Jsp,Spring Mvc,这是一个addBook.jsp,当单击edit时,它抛出空指针异常 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun

这是一个addBook.jsp,当单击edit时,它抛出空指针异常

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Spring MVC Form Handling</title>
    </head>
    <body>
        <h2>Add booK Data</h2>
        <form:form method="POST" action="/sdnext/save.html">
            <table>
                <tr>
                    <td><form:label path="bookCode">Book Code:</form:label></td>
                    <td><form:input path="bookCode" value="${book.bookCode}" readonly="true"/></td>
                </tr>
                <tr>
                    <td><form:label path="bookName">Book Name:</form:label></td>
                    <td><form:input path="bookName" value="${book.bookName}" /></td>
                </tr>
                <tr>
                    <td><form:label path="author">Book Author Name:</form:label></td>
                    <td><form:input path="author" value="${book.author}"/></td>
                </tr>
                <tr>
                    <td><form:label path="dateOfArrival">Date Of Arrival:</form:label></td>
                    <td><form:input path="dateOfArrival" value="${book.dateOfArrival}"/></td>
                </tr>   
                <tr>
                    <td><form:label path="price">Price Of Book:</form:label></td>
                    <td><form:input path="price" value="${book.price}"/></td>
                </tr>
                <tr>
                    <td><form:label path="rackId">Book Rack Id:</form:label></td>
                    <td><form:input path="rackId" value="${book.rackId}"/></td>
                </tr>
                <tr>
                    <td><form:label path="numberOfBooks">Number of Books:</form:label></td>
                    <td><form:input path="numberOfBooks" value="${book.numberOfBooks}"/></td>
                </tr>
                <tr>
                    <td><form:label path="subjectCode">Book Subject Code:</form:label></td>
                    <td><form:input path="subjectCode" value="${book.subjectCode}"/></td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" value="Submit"/></td>
                </tr>
            </table> 
        </form:form>

        <c:if test="${!empty books}">
            <h2>List Books</h2>
            <table align="left" border="1">
                <tr>
                    <th>NameOfBook</th>
                    <th>BookCode</th>
                    <th>AuthorName</th>
                    <th>DateOfArrival</th>
                    <th>PriceOfBook</th>
                    <th>BookRackId</th>
                    <th>NumberofBooks</th>
                    <th>BookSubjectCode</th>
                    <th>Actions on Row</th>
                </tr>
                <c:forEach items="${books}" var="book">
                    <tr>
                        <td><c:out value="${book.bookName}"/></td>
                        <td><c:out value="${book.bookCode}"/></td>
                        <td><c:out value="${book.author}"/></td>
                        <td><c:out value="${book.dateOfArrival}"/></td>
                        <td><c:out value="${book.price}"/></td>
                        <td><c:out value="${book.rackId}"/></td>
                        <td><c:out value="${book.numberOfBooks}"/></td>
                        <td><c:out value="${book.subjectCode}"/></td>
                        <td align="center"><a href="edit.html?id=${book.bookCode}">Edit</a> | <a href="delete.html?id=${book.bookCode}">Delete</a></td>
                    </tr>
                </c:forEach>
            </table>
        </c:if>
    </body>
</html>
这是我的控制器类,我在其中获取edit方法中bookCode字段的值,get方法为null

package com.tcs.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.tcs.bean.BookBean;
import com.tcs.model.Book;
import com.tcs.service.BookService;

@Controller
public class BookController {
    @Autowired
    private BookService bookService;

    @RequestMapping(method=RequestMethod.POST, value = "/save")
    public ModelAndView saveBook(@ModelAttribute("command") BookBean bookBean, BindingResult result) {
        Book book = prepareModel(bookBean);
        bookService.addBook(book);

        return new ModelAndView("redirect:/add.html");
    }

    @RequestMapping(value="/books", method = RequestMethod.GET)
    public ModelAndView listBooks() {
        Map<String, Object> model = new HashMap<String, Object>();
        model.put("books",  prepareListofBean(bookService.listBooks()));

        return new ModelAndView("booksList", model);
    }

    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public ModelAndView addBook(@ModelAttribute("command") BookBean booksBean, BindingResult result) {
        Map<String, Object> model = new HashMap<String, Object>();
        model.put("books",  prepareListofBean(bookService.listBooks()));

        return new ModelAndView("addBook", model);
    }

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public ModelAndView welcome() {
        return new ModelAndView("index");
    }

    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public ModelAndView deleteBook(@ModelAttribute("command") BookBean bookBean, BindingResult result) {
        System.out.println(bookBean.getBookCode());
        bookService.deleteBook(prepareModel(bookBean));

        Map<String, Object> model = new HashMap<String, Object>();
        model.put("book", null);
        model.put("books",  prepareListofBean(bookService.listBooks()));

        return new ModelAndView("addBook", model);
    }

    @RequestMapping(value = "/edit" , method=RequestMethod.GET)
    public ModelAndView editBook(@ModelAttribute("command") BookBean bookBean, BindingResult result) {
        Map<String, Object> model = new HashMap<String, Object>();
        System.out.println(bookBean.getBookCode());
        model.put("book", prepareBooksBean(bookService.getBook(bookBean.getBookCode())));
        model.put("books",  prepareListofBean(bookService.listBooks()));

        return new ModelAndView("addBook", model);
    }

    private Book prepareModel(BookBean bookBean){
        Book book = new Book();
        book.setBookName(bookBean.getBookName());
        book.setBookCode(bookBean.getBookCode());
        book.setAuthor(bookBean.getAuthor());
        book.setDateOfArrival(bookBean.getDateOfArrival());
        book.setPrice(bookBean.getPrice());
        book.setRackId(bookBean.getRackId());
        book.setNumberOfBooks(bookBean.getNumberOfBooks());
        book.setSubjectCode(bookBean.getSubjectCode());

        return book;
    }

    private List<BookBean> prepareListofBean(List<Book> books){
        List<BookBean> beans = null;

        if(books != null && !books.isEmpty()) {
            beans = new ArrayList<BookBean>();

            BookBean bean = null;

            for(Book book : books){
                bean = new BookBean();
                bean.setBookName(book.getBookName());
                bean.setBookCode(book.getBookCode());
                bean.setAuthor(book.getAuthor());
                bean.setDateOfArrival(book.getDateOfArrival());
                bean.setPrice(book.getPrice());
                bean.setRackId(book.getRackId());
                bean.setNumberOfBooks(book.getNumberOfBooks());
                bean.setSubjectCode(book.getSubjectCode());
                beans.add(bean);
            }
        }

        return beans;
    }

    private BookBean prepareBooksBean(Book book){
        BookBean bean = new BookBean();

        bean.setBookName(book.getBookName());
        bean.setBookCode(book.getBookCode());
        bean.setAuthor(book.getAuthor());
        bean.setDateOfArrival(book.getDateOfArrival());
        bean.setPrice(book.getPrice());
        bean.setRackId(book.getRackId());
        bean.setNumberOfBooks(book.getNumberOfBooks());
        bean.setSubjectCode(book.getSubjectCode());

        return bean;
    }
}
package com.tcs.controller;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Controller;
导入org.springframework.validation.BindingResult;
导入org.springframework.web.bind.annotation.ModelAttribute;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.servlet.ModelAndView;
导入com.tcs.bean.BookBean;
导入com.tcs.model.Book;
导入com.tcs.service.BookService;
@控制器
公共类图书管理员{
@自动连线
私人图书服务;
@RequestMapping(method=RequestMethod.POST,value=“/save”)
公共模型和视图保存本(@modeldattribute(“命令”)BookBean BookBean,BindingResult){
Book Book=prepareModel(bookBean);
bookService.addBook(book);
返回新的ModelAndView(“重定向:/add.html”);
}
@RequestMapping(value=“/books”,method=RequestMethod.GET)
公共模型和视图listBooks(){
映射模型=新的HashMap();
model.put(“books”,prepareListofBean(bookService.listBooks());
返回新的model和view(“booksList”,model);
}
@RequestMapping(value=“/add”,method=RequestMethod.GET)
公共模型和视图addBook(@modeldattribute(“命令”)BookBean BookBean,BindingResult){
映射模型=新的HashMap();
model.put(“books”,prepareListofBean(bookService.listBooks());
返回新的ModelAndView(“addBook”,model);
}
@RequestMapping(value=“/index”,method=RequestMethod.GET)
公共模型和视图欢迎(){
返回新的ModelAndView(“索引”);
}
@RequestMapping(value=“/delete”,method=RequestMethod.GET)
公共ModelAndView deleteBook(@modeldattribute(“命令”)BookBean BookBean,BindingResult){
System.out.println(bookBean.getBookCode());
deleteBook(prepareModel(bookBean));
映射模型=新的HashMap();
model.put(“book”,空);
model.put(“books”,prepareListofBean(bookService.listBooks());
返回新的ModelAndView(“addBook”,model);
}
@RequestMapping(value=“/edit”,method=RequestMethod.GET)
公共模型和视图编辑本(@modeldattribute(“command”)BookBean BookBean,BindingResult){
映射模型=新的HashMap();
System.out.println(bookBean.getBookCode());
model.put(“book”,prepareBooksBean(bookService.getBook(bookBean.getBookCode()));
model.put(“books”,prepareListofBean(bookService.listBooks());
返回新的ModelAndView(“addBook”,model);
}
私人书籍准备模型(BookBean BookBean){
书=新书();
book.setBookName(bookBean.getBookName());
book.setBookCode(bookBean.getBookCode());
book.setAuthor(bookBean.getAuthor());
book.setDateOfArrival(bookBean.getDateOfArrival());
book.setPrice(bookBean.getPrice());
book.setRackId(bookBean.getRackId());
book.setNumberOfBooks(bookBean.getNumberOfBooks());
book.setSubjectCode(bookBean.getSubjectCode());
还书;
}
私人清单编制(清单册){
listbeans=null;
if(books!=null&&!books.isEmpty()){
beans=新的ArrayList();
BookBean=null;
用于(书籍:书籍){
bean=newbookbean();
setBookName(book.getBookName());
setBookCode(book.getBookCode());
setAuthor(book.getAuthor());
setDateOfArrival(book.getDateOfArrival());
setPrice(book.getPrice());
setRackId(book.getRackId());
setNumberOfBooks(book.getNumberOfBooks());
setSubjectCode(book.getSubjectCode());
添加(bean);
}
}
返豆;
}
private BookBean prepareBooksBean(图书){
BookBean=新的BookBean();
setBookName(book.getBookName());
setBookCode(book.getBookCode());
setAuthor(book.getAuthor());
setDateOfArrival(book.getDateOfArrival());
setPrice(book.getPrice());
setRackId(book.getRackId());
setNumberOfBooks(book.getNumberOfBooks());
setSubjectCode(book.getSubjectCode());
返回豆;
}
}
这是我的控制器的一个服务类

package com.tcs.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.tcs.dao.BookDao;
import com.tcs.model.Book;

@Service("bookService")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void addBook(Book book) {
        bookDao.addBook(book);
    }

    public List<Book> listBooks() {
        return bookDao.listBooks();
    }

    public Book getBook(int bookCode) {
        return bookDao.getBook(bookCode);
    }

    public void deleteBook(Book book) {
        bookDao.deleteBook(book);
    }
}
package com.tcs.service;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入org.springframework.transaction.annotation.Propagation;
导入org.springframework.transaction.annotation.Transactional;
导入com.tcs.dao.BookDao;
导入com.tcs.model.Book;
@服务(“图书服务”)
@事务性(传播=propagation.SUPPORTS,只读=true)
公共类BookServiceImpl实现BookService{
@自动连线
私家书刀;
@事务性(传播=propagation.REQUIRED,只读=false)
公共无效地址簿(Book Book){
书刀。添加书(书);
}
公开名单册(){
返回bookDao.listBooks();
}
公共图书getBook(int bookCode){
返回bookDao.getBook(bookCode);
}
公共图书{
bookDao.deleteBook(book);
}
}
这是servlet.xml的设置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <context:property-placeholder location="classpath:resources/database.properties" />
    <context:component-scan base-package="com.tcs" />

    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/>

    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password}" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.tcs.model.Book</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>             
            </props>
        </property>
    </bean>

    <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <context:property-placeholder location="classpath:resources/database.properties" />
    <context:component-scan base-package="com.tcs" />

    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/>

    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password}" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.tcs.model.Book</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>             
            </props>
        </property>
    </bean>

    <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>sdnext</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/sdnext-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>sdnext</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>
    @RequestMapping(value = "/edit" , method=RequestMethod.GET)
    public ModelAndView editBook(@ModelAttribute("command") BookBean bookBean, 
            BindingResult result) {

        Map<String, Object> model = new HashMap<String, Object>();
        System.out.println(bookBean.getBookCode()); // bookbean is null
        model.put("book", prepareBooksBean(bookService.getBook(bookBean.getBookCode())));
        model.put("books",  prepareListofBean(bookService.listBooks()));
        return new ModelAndView("addBook", model);
    }
<a href="edit.html?id=${book.bookCode}">Edit</a>