我的模型是
@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" > *</div></label>
<label id="bbb" for="manufacturer" class="col-sm-2 col-form-label col-form-label-lg">Manufacturer Name <div class="req" > *</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"> *</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"> *</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"> *</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]