无法更新我在春天启动的形式(Cannot update my form in spring boot

2019-10-29 03:03发布

我的模型是

@Entity
@Table(name = "sls_notifications")
public class SLSNotification {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(length = 11)
    private Integer snumber;

    @JsonFormat(pattern="yyyy-MM-dd")
    @Column(nullable = false)
    private Date date = new Date();

    @Column(length = 8)
    private String cusOffice;

    @Column(length = 1)
    private String cusSerial;

    @Column(length = 50)
    private String cusDecNo;
    @JsonFormat(pattern="yyyy-MM-dd")
    private Date cusDate;

    @Column(length = 300)
    private String manufacturer;

    @Column(length = 300)
    private String exporterAddress;

    @Column(length = 20)
    private String importerVAT;

    @NotEmpty
    @Column(length = 20, nullable = false)
    private String declarantVAT;

    private String declarantDetails;

    private String vessel;

    private String blNo;

    private String loadingPort;

    private String tradingCountry;

    private String countryOrigin;

    private String invoiceNo;
    @JsonFormat(pattern="yyyy-MM-dd")
    private Date invoiceDate;

    private Double invoiceValue;

    private String uom;

    private Double totalQty;

    private String marksNumber;

    private String goodsDesc;

    private String purpose;

    private String hsCode;

    private String issuerQltyCert;

    private String qltyCertifacateNo;

    private String slsNo;

    private String invoiceLoc;

    private String blLoc;

    private String packlistLoc;

    private String qcLoc;

    private String otherLoc;

    private String accRep;

    private String accRepLoc;

    @NotEmpty
    @Column(length = 255, nullable = false)
    private String status = "PENDING";

    private String userId;

    private String slsiUnit;

    private String importerDetails;
    private String productDesc;
    private String certRefNo;
     @JsonFormat(pattern="yyyy-MM-dd")
    private Date blDate;
    private String loadCountry;
}

我repositary是

public interface SLSNotificationRepository extends 
        CrudRepository<SLSNotification, Integer> {
    @Override
    SLSNotification save(SLSNotification slsNotification);

    @Override
    SLSNotification findOne(Integer snumber);


    @Override
    long count();

    @Override
    void delete(Integer integer);

    @Override
    void delete(SLSNotification slsNotification);

    @Override
    void delete(Iterable<? extends SLSNotification> iterable);

    @Override
    List<SLSNotification> findAll();

    @Query("select a from SLSNotification a where a.slsiUnit in :unitList")
    List<SLSNotification> getApplicationsByUnit(@Param("unitList")List <String> unitList);

    @Query("select a from SLSNotification a where a.userId = :userId")
    List<SLSNotification> getApplicationsByUserId(@Param("userId")String userId);

    @Query("select a from SLSNotification a where a.slsNo = :slsNo")
    SLSNotification getApplicationBySLSNumber(@Param("slsNo") String slsNo);

   @Query("select a from SLSNotification a where a.importerVAT = :importerVAT group by slsNo")
    List<SLSNotification> getproductByUserId(@Param("importerVAT")String importerVAT);
}

我的服务是

package lk.slsi.services;

import lk.slsi.domain.SLSNotification;
import lk.slsi.repository.SLSIWorkflowRepository;
import lk.slsi.repository.SLSNotificationRepository;
import lk.slsi.storage.FileSystemStorageService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import org.springframework.data.repository.query.Param;

@Service
@Scope("session")
public class ApplicationServices {
    private static final Logger serviceLogger = LogManager.getLogger(ApplicationServices.class);

    @Autowired
    private SLSNotificationRepository slsNotificationRepository;

    @Autowired
    private WorkflowServices workflowServices;



    @Autowired
    private FileSystemStorageService storageService;

    @Autowired
    private FileUploadRollBack rollBack;

    @Value("${slsi.filePaths.packlist}")
    private String packlist;
    @Value("${slsi.filePaths.qc}")
    private String qc;
    @Value("${slsi.filePaths.bl}")
    private String bl;
    @Value("${slsi.filePaths.invoice}")
    private String invoice;
    @Value("${slsi.filePaths.otherDoc}")
    private String otherDoc;
    @Value("${slsi.filePaths.accept}")
    private String accept;

    public boolean updateOrAddApplication(SLSNotification slsNotification,
                                          MultipartFile attachInv,
                                          MultipartFile attachBL,
                                          MultipartFile attachPackList,
                                          MultipartFile attachQc,
                                          MultipartFile attachOther,
                                          MultipartFile fileAccRep) {
        serviceLogger.info("Staring adding/updating the SLS Notification data . data : [{}]", slsNotification);
        try {
            if (!attachInv.isEmpty()) {
                serviceLogger.info("Uploading file : [{}]", attachInv.getOriginalFilename());
                slsNotification.setInvoiceLoc(storageService.store(attachInv, invoice));
                rollBack.addRollbackPoint(invoice,slsNotification.getInvoiceLoc());
            }
            if (!attachBL.isEmpty()) {
                serviceLogger.info("Uploading file : [{}]", attachBL.getOriginalFilename());
                slsNotification.setBlLoc(storageService.store(attachBL, bl));
                rollBack.addRollbackPoint(bl,slsNotification.getBlLoc());
            }
            if (!attachPackList.isEmpty()) {
                serviceLogger.info("Uploading file : [{}]", attachPackList.getOriginalFilename());
                slsNotification.setPacklistLoc(storageService.store(attachPackList, packlist));
                rollBack.addRollbackPoint(packlist,slsNotification.getPacklistLoc());
            }
            if (!attachQc.isEmpty()) {
                serviceLogger.info("Uploading file : [{}]", attachQc.getOriginalFilename());
                slsNotification.setQcLoc(storageService.store(attachQc, qc));
                rollBack.addRollbackPoint(qc,slsNotification.getQcLoc());
            }
            if (!attachOther.isEmpty()) {
                serviceLogger.info("Uploading file : [{}]", attachOther.getOriginalFilename());
                slsNotification.setOtherLoc(storageService.store(attachOther, otherDoc));
                rollBack.addRollbackPoint(otherDoc,slsNotification.getOtherLoc());
            }
            if (!fileAccRep.isEmpty()) {
                serviceLogger.info("Uploading file : [{}]", fileAccRep.getOriginalFilename());
                slsNotification.setAccRepLoc(storageService.store(fileAccRep, accept));
                rollBack.addRollbackPoint(accept,slsNotification.getAccRepLoc());
            }

            serviceLogger.info("Saving data in the database. [{}]", slsNotification);
            slsNotificationRepository.save(slsNotification);
            workflowServices.initWorkflow(slsNotification.getSnumber());
            return true;
        } catch (Exception e) {
            serviceLogger.error("Error occurred while saving SLS Common data . [{}]", e);
            rollBack.rollback();
            return false;
        }
    }

    public boolean update(SLSNotification slsNotification) {
        serviceLogger.info("Staring adding/updating the SLS Notification data . data : [{}]", slsNotification);
        try {
            serviceLogger.info("Saving data in the database. [{}]", slsNotification);
            slsNotificationRepository.save(slsNotification);
            return true;
        } catch (Exception e) {
            serviceLogger.error("Error occurred while saving SLS Common data . [{}]", e);
            rollBack.rollback();
            return false;
        }
    }

    public List<SLSNotification> getAll(){
        return slsNotificationRepository.findAll();
    }

    public SLSNotification getSLSNotificationBySerialNumnber(Integer serialNumber) {
        return slsNotificationRepository.findOne(serialNumber);
    }

    public List<SLSNotification> getApplicationsByUserId(String userId){
        return slsNotificationRepository.getApplicationsByUserId(userId);
    }

    public List<SLSNotification> getproductByUserId(String importerVAT){
        return slsNotificationRepository.getproductByUserId(importerVAT);
    }

    public List<SLSNotification> getApplicationsByUnit(List <String> unitList){
        return slsNotificationRepository.getApplicationsByUnit(unitList);
    }
    public SLSNotification getApplicationById(Integer snumber){
        return slsNotificationRepository.findOne(snumber);
    }

    public Resource getFile(String filename){
        return storageService.getFileResource(filename);
    }
}

我的控制器

package lk.slsi.controller;

import lk.slsi.domain.SLSNotification;
import lk.slsi.exceptions.ProductWithSameSerialExistsException;
import lk.slsi.security.domain.AuthenticatedUser;
import lk.slsi.services.ApplicationServices;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.SimpleFileResolver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;


import static org.hibernate.annotations.common.util.impl.LoggerFactory.logger;

/**
 * Created by ignotus on 2/18/2017.
 */
@Controller
@RequestMapping(path = "/")
@Scope("session")
public class ApplicationUrlMapController {

    private static final Logger slsiLogger = LogManager.getLogger(ApplicationUrlMapController.class);
    private static final String MESSAGE_KEY = "message";
    private static final String APPLICATION_REDIRECT = "redirect:/application";
    @Autowired
    private ServletContext servletContext;
    @Autowired
    private ApplicationServices applicationServices;

    @Autowired
    private ProductServices productServices;
    private MailService mailservice;

    @Autowired
    private ManufacturerServices manufacturerServices;

    @Autowired
    private WorkflowServices workflowServices;

    @Value("${slsi.reportData}")
    private String reportDataLocation;

    @RequestMapping(path = "/application")
    public String viewApplication(Model model) {
        model.addAttribute("manu", manufacturerServices.getManufacturerListbyStatus());
        model.addAttribute("edit", true);
        return "application";
    }

    @RequestMapping(path = "/EditApplication/{snumber}",method = RequestMethod.POST)
    public String addApplication(@PathVariable("snumber") @ModelAttribute("snumber") String snumber, Model model) {
        model.addAttribute("app", applicationServices.getApplicationById(Integer.parseInt(snumber)));
        model.addAttribute("manu", manufacturerServices.getManufacturerListbyStatus());
        model.addAttribute("edit", true);
        return "editApplication";
    }

    @RequestMapping(path = "/executeApplication", method = RequestMethod.POST)
    public String registerApplication(@ModelAttribute("applicationForm") @Valid SLSNotification application,
            BindingResult result,
            HttpSession session,
            @RequestParam("attachInv") MultipartFile attachInv,
            @RequestParam("attachBL") MultipartFile attachBL,
            @RequestParam("attachPackList") MultipartFile attachPackList,
            @RequestParam("attachQc") MultipartFile attachQc,
            @RequestParam("attachOther") MultipartFile attachOther,
            @RequestParam("fileAccRep") MultipartFile fileAccRep) {

        if (result.hasErrors()) {
            session.setAttribute(MESSAGE_KEY, "application validation failed");
            return "redirect:/application?" + MESSAGE_KEY;
        }
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        if (principal != null && principal instanceof AuthenticatedUser) {
            AuthenticatedUser auth = (AuthenticatedUser) principal;
            application.setUserId(String.valueOf(auth.getUserId()));
        }
        //Setting the slsiUnit of the notification
//        String sls = application.getSlsNo();
//        Product p = productServices.getProductBySlsNo(Integer.parseInt(sls));
//        int slsUnitNumber =p.getSlsiUnit();
//        
//        application.setSlsiUnit("UNIT"+ slsUnitNumber);

        slsiLogger.info("Executing application update. application : [{}]", application);
        if (applicationServices.updateOrAddApplication(application,
                attachInv, attachBL, attachPackList, attachQc, attachOther, fileAccRep)) {
            session.setAttribute(MESSAGE_KEY, "application update successful!");
        } else {
            session.setAttribute(MESSAGE_KEY, "application update was not successful");
        }
        return "redirect:/applicationManage?" + MESSAGE_KEY;
    }

    @RequestMapping(path = "/updateUserApplication", method = RequestMethod.POST)
    public String updateApplication(@ModelAttribute("updateapplicationForm") @Valid SLSNotification slsNotification,
            BindingResult result,
            HttpSession session) {
        slsiLogger.info("Request received to register new product. [{}]", slsNotification);
        if (result.hasErrors()) {
            slsiLogger.error("Rejecting the request due to binding errors, [{}]", result.getFieldErrors());
            return "redirect:/applicationManage?";
        }

        if (applicationServices.update(slsNotification)) {
            slsiLogger.info("Product registered successfully");
            session.setAttribute(MESSAGE_KEY, "Product registered successfully");
        } else {
            session.setAttribute(MESSAGE_KEY, "Error occurred while registering the product");
        }
        return "redirect:/applicationManage?" + MESSAGE_KEY;
    }

    @RequestMapping(path = "/applicationManage")
    public String viewApplicationPage(Model model) {
        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        long userId = 0;
        String agency = "";
        String units = "";
        String jobroles = "";
        if (principal != null && principal instanceof AuthenticatedUser) {
            AuthenticatedUser auth = (AuthenticatedUser) principal;
            userId = auth.getUserId();
            agency = auth.getAgency();

            if (agency.equalsIgnoreCase("slsi")) {
                System.out.println("Agency of the User is " + agency);

                model.addAttribute("applications", applicationServices.getApplicationsByUnit(auth.getJobUnits()));
            } else {
                model.addAttribute("applications", applicationServices.getApplicationsByUserId(String.valueOf(userId)));
            }
        }
        return "applicationManage";
    }

    @RequestMapping(path = "/applicationView", method = RequestMethod.POST)
    public String viewApplicationUpdatePage(@ModelAttribute("appId") String appId, Model model) {
        model.addAttribute("application", applicationServices.getApplicationById(Integer.parseInt(appId)));
        return "view";
    }

    @RequestMapping(value = "/download/{fileName}*", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<Resource> downLoadFile(@PathVariable("fileName") String filename) {
        Resource file = applicationServices.getFile(filename);
        return ResponseEntity
                .ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"")
                .body(file);
    }

    @RequestMapping(path = "/viewPdf/{snumber}", method = RequestMethod.POST)
    public ModelAndView getPDFReport(@PathVariable("snumber") String snumber) {
        File reportsDir = Paths.get(servletContext.getRealPath(reportDataLocation)).toFile();
        if (!reportsDir.exists()) {
            throw ProductWithSameSerialExistsException.getInstance();
        }
        JRDataSource dataSource = new JRBeanCollectionDataSource(Arrays.asList(applicationServices.getApplicationById(Integer.parseInt(snumber))));
        Map<String, Object> parameterMap = new HashMap<>();
        parameterMap.put("datasource", dataSource);
        parameterMap.put("JasperCustomSubReportDatasource", dataSource);
        parameterMap.put(JRParameter.REPORT_FILE_RESOLVER, new SimpleFileResolver(reportsDir));
        System.out.println(dataSource);
        return new ModelAndView("pdfReport", parameterMap);
    }
}

我是JSP(编辑JSP)。我只希望在我form.So我creaded新的JSP进行编辑应用程序编辑一些选定的领域,

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Application</title>
        <meta charset="UTF-8">
        <%@include file="template/styles.jsp" %>
        <script src="${pageContext.request.contextPath}/view/public/js/jquery.min.js"></script>
        <script src="${pageContext.request.contextPath}/view/public/js/jquery-ui.min.js"></script>
    </head>
    <sec:authorize/>

    <body>
        <div class="container">
            <!-- Start of common header -->
            <div class="row headerRow1">
                <div class="col-md-12">
                    <jsp:include page="template/banner.jsp"/>
                </div>
            </div>
            <div class="row">
                <div class="authheader">
                    <%@include file="template/message.jsp" %>
                </div>
            </div>

            <div class="col-sm-12">
                <div class="row">
                    <div class="col-lg-12">
                        <div class="well lead">UPDATE NOTIFICATION FORM - SLSI ENTRY NO ${app.snumber}</div>
                    </div>
                </div>
                <div id="" style="color: red">Use Google Chrome Web browser for update your Application.</div>
                <div class="row">
                    <!-- Start of common navigation -->
                    <form:form name="updateapplicationForm" id="updateapplicationForm" action="updateUserApplication" commandName="app" method="post" enctype="application/x-www-form-urlencoded">
                         <c:if test="${edit}">
                             <input type="text" id="snumber" name="snumber" value="${app.snumber}"/>
                        </c:if>
                        <div class="panel panel-default">
                            <div class="panel-body" >

                                <div class="row">
                                    <label id="aaa" for="manufacturer" class="col-sm-2 col-form-label col-form-label-lg">Manufacturer Name &
                                        Address <div class="req" >&nbsp;*</div></label>
                                    <label id="bbb" for="manufacturer" class="col-sm-2 col-form-label col-form-label-lg">Manufacturer Name <div class="req" >&nbsp;*</div></label>
                                    <div id="">
                                        <div class="col-sm-4">
                                            <div class="checkbox">
                                                <label><input type="checkbox" value="" id="registered">Registered Manufacturer in SLSI</label>
                                            </div>
                                            <div id="regManu">
                                                <select id="companies">
                                                    <c:forEach items="${manu}" var="com">
                                                        <option value="${com.manufacturerName}">${com.manufacturerName}</option>
                                                    </c:forEach>
                                                </select>
                                            </div>
                                            <textarea name="manufacturer" class="form-control form-control-lg"
                                                      id="manufacturer"
                                                      placeholder="Enter the name & Address. Press Enter at the end of each line"
                                                      aria-descrribedby="exportertHelp" data-error="Name & Address is required!"
                                                      required rows="4" maxlength="254"></textarea>
                                            <input  type="hidden" id="manufacture" name="manufacture" value="${app.manufacturer}"/>
                                            <div class="help-block with-errors"></div>
                                        </div>
                                        <label for="exporterAddress" class="col-sm-2 col-form-label col-form-label-lg">Exporter Name &
                                            Address <div class="req">&nbsp;*</div></label>
                                        <div class="col-sm-4">
                                            <textarea name="exporterAddress" class="form-control form-control-lg" id="exporterAddress"
                                                      placeholder="Enter the name & Address. Press Enter at the end of each line"
                                                      aria-descrribedby="exportertHelp" data-error="Name & Address is required!"
                                                      required rows="5" maxlength="254"></textarea><br/><br/>
                                            <input  type="hidden" id="exp" name="exp" value="${app.exporterAddress}"/>
                                            <div class="help-block with-errors"></div>
                                        </div>
                                    </div>


                                    <div class="row">
                                        <br/> <label for="importerVAT" class="col-sm-2 col-form-label col-form-label-lg">Importer VAT <div class="req">&nbsp;*</div></label>
                                        <div class="col-sm-4">
                                            <input class="form-control" type="text" name="importerVAT" id="importerVAT"
                                                   aria-describedby="importerVATHelp" placeholder="Ex : 174625588-7000 (White spaces not allowed)"
                                                   data-error="VAT number is required!" onkeyup="lettersOnly(this)" required value="${app.importerVAT}">
                                            <div class="help-block with-errors"></div>
                                        </div>

                                        <label for="declarantVAT" class="col-sm-2 col-form-label col-form-label-lg">Declarant VAT <div class="req">&nbsp;*</div></label>
                                        <div class="col-sm-4">
                                            <input class="form-control" name="declarantVAT" type="text" id="declarantVAT"
                                                   aria-describedby="declarantVATHelp" placeholder="Ex : 174625588-7000 (White spaces not allowed)"
                                                   data-error="VAT number is required!" onkeyup="lettersOnly(this)" required value="${app.declarantVAT}">
                                            <div class="help-block with-errors"></div>
                                        </div>
                                    </div>



                                </div>
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-sm-12">
                                <button type="submit" id="submit" class="btn btn-success pull-right">SAVE CHANGES</button>
                            </div>
                            <div class="col-sm-3" id="msg">
                                <% if (message.startsWith("Registration")) {
                                        out.print("<script>alert('" + message + "');</script>");
                                        request.getSession().setAttribute("regMessage", "");
                                    }
                                %>
                            </div>

                        </div>
                    </form:form>
                </div>
                <jsp:include page="template/footer.jsp"/>
            </div>
    </body>        
</html>

数据succecfully retrive到编辑jsp..but时,我打萨瓦按钮,它会得到error..I要更新的应用程序...

请帮我。

误差

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Nov 07 12:32:42 IST 2017
There was an unexpected error (type=Internal Server Error, status=500).
For input string: "updateUserApplication"

在我的NetBeans控制台显示这个错误

java.lang.NumberFormatException: For input string: "updateUserApplication"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_121]
    at java.lang.Integer.parseInt(Integer.java:580) ~[na:1.8.0_121]
    at java.lang.Integer.parseInt(Integer.java:615) ~[na:1.8.0_121]
    at lk.slsi.controller.ApplicationUrlMapController.addApplication(ApplicationUrlMapController.java:81) ~[classes/:na]
    at sun.reflect.GeneratedMethodAccessor842.invoke(Unknown Source) ~[na:na]

Answer 1:

从控制器代码,所述API端点/slsi_mof/EditApplication/{snumber}是越来越调用。 这是因为你在表单操作使用相对URL。 更新表单动作/slsi_mof/updateUserApplication ,它应该工作



文章来源: Cannot update my form in spring boot