아빠아버지
563
2019-05-13 21:06:56 작성 2019-05-13 21:08:52 수정됨
7
247

list값을 컨트롤러단에서 체크가 안되네요.ㅠㅠ



<input type="checkbox" name="old_no" value="${file.file_no}" />삭제<br />

@RequestParam(value = "old_no", required=false) List<Integer> old_no,


위와같이 첫번째줄은 jsp단에서 , 2번째줄은 컨트롤러단 소스입니다.

jsp단에서 첨부파일을 여러개 업로드를 할 경우 컨트롤러단에서 List타입으로 받아지게 했는데


문제는 jsp단에서 삭제할 파일을 선택하지 않을 경우 컨트롤러단에서 nullpoint익셉션을 뱉어버리네요..ㅠㅠ

old_no.isEmpty()로 해보고, old_no.size()로 체크를 해봐도 이상하게 안먹히네요..ㅠㅠ

아래는 오류코드입니다.



May 13, 2019 9:01:32 PM org.apache.catalina.core.StandardWrapperValve invoke
심각: Servlet.service() for servlet [appServlet] in context with path [/intranet] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
	at com.xxx.intra.board.controller.BoardController.update(BoardController.java:106)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)


106번째줄 소스는
아래와같이 두가지를 사용 해 봤는데 모두 널포인트 익셉션이 떨어지네요.ㅠㅠ

if(old_no.isEmpty()) {

if(!old_no.size() > 0) {


0
0
  • 답변 7

  • 사는게힘듭니다
    2019-05-13 21:42:06

    컨트롤러단에 메소드 매개변수에 defaultValue값을 지정해줘보세요.

    0
  • 아빠아버지
    563
    2019-05-13 21:49:52

    사는게힘듭니다님./. 답변 감사합니다.

    defaultValue값을 지정한다는말은 기본 nullpointexception을 없애는 용도이고,

    만약 업로드 한 파일이 있을 경우에는 defaultValue값이 없어지고, 실제 받아온 파일이 저장되는 용도로 사용되는건가요?

    0
  • 사는게힘듭니다
    2019-05-13 22:42:04

    그렇죠 체크박스는 체크를해야 value값이 서버로 전송이 되기때문에

    체크가 되지않으면 저 변수엔 아무런 값도 저장되지않아 nullpointerException이 발생하죠

    체크를하면 그 체크한값들이 List형태로 저값에 저장이되는거구요.


    만일 체크가되지않으면 저 변수의 값을 어떻게 처리하실건지는 작성자님 몫입니다.

    0
  • 사는게힘듭니다
    2019-05-13 22:43:40

    체크를하지않으면 List<Integer> old_no 라는 변수엔 defaultValue로 지정한 값이 저장되는거구요,

    0
  • rezigrene
    1k
    2019-05-13 22:44:36 작성 2019-05-13 22:51:50 수정됨
    if (old_no == null) 
    0
  • 사는게힘듭니다
    2019-05-13 22:49:40

    @RequestParam(value="old_no", required=false, defaultValue="0")

    삭제할 파일을 선택하지 않았을때.

    if(old_no.equals("0"){

       ~~~~~~~

    }

    0
  • 아빠아버지
    563
    2019-05-13 23:08:08

    감사합니다.^^';

    사는게힘듭니다님 말씀처럼 체크하니까 시원하게 되네요.ㅠ.ㅠ

    이것때문에 이틀을..ㅠㅠ

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.