2016-10-13 92 views
0

這是我第一次在這裏發佈。我有一個關於如何將來自「html select multiple」的數據保存到數據庫中的問題。我正在使用dto(數據傳輸對象)將我的表單中的輸入值傳遞給控制器​​。如何保存數據庫中的多個選擇

這是我的HTML代碼:

<form:form id="user-form" action="/admin/users/add-user/add-success" commandName="addUser" method="POST"> 
    <fieldset> 
     <legend class="text-center"> 
      <label class="text font-md">Profile Information</label> 
     </legend>    

     <div class="form-group"> 
      <label class="control-label">Select Property <span class="important">*</span></label> 
      <select class="form-control custom-scroll" path="propertyList.propertyId" name="propertyId" id="propertyId" multiple> 
       <c:forEach var="property" items="${property}"> 
        <option value="${property.id}" data-value="${property.prtCompany.id}"><c:out value="${property.propertyName}"/></option> 
       </c:forEach> 
      </select> 
      <div class="note"> 
       <strong>Note:</strong> hold down the ctrl/cmd button to select multiple options. 
      </div> 
     </div> 
     <div class="form-actions"> 
      <div class="row"> 
       <div class="col-sm-12"> 
        <button class="btn btn-primary" type="submit"> 
         Submit 
        </button> 
       </div> 
      </div> 
     </div> 
    </fieldset> 
</form:form> 

這是我的控制器代碼:

@RequestMapping(value = "/admin/users/add-user/add-success", method = RequestMethod.POST) 
public ModelAndView saveAddUser(ModelMap mvc, @ModelAttribute("addUser") UserProfileDto userProfileDto, HttpServletResponse response) throws IOException, ServerException { 

    ModelAndView mv = new ModelAndView("user-pages/user"); 

    userProfileDto.setAuditId(auditService.logAuditCreate().getId()); 
    userProfileDto = userProfileService.createUserProfile(userProfileDto); 

    return mv; 
} 

這是我ServiceImpl:

public UserProfileDto createUserProfile(UserProfileDto userProfileDto) { 
    UserProfile userProfile = new UserProfile(); 
    userProfile = convertDtoToEntity(userProfile, userProfileDto); 
    save(userProfile); 
    return convertEntityToDto(userProfile); 
} 

protected UserProfile convertDtoToEntity(UserProfile userProfile, UserProfileDto dto) { 

List<Property> propertyList = listUsersProperty(dto.getPropertyList()); 

userProfile.setProperty(propertyList); 

return userProfile; 
} 

protected List<Property> listUsersProperty(List<PropertyDto> propertyDtoList) { 
List<Property> propertyList = null; 
for (PropertyDto propertyDto : propertyDtoList) { 
    propertyList.add(entityManager.find(Property.class, propertyDto.getId())); 
} 
return propertyList; 
} 

這是錯誤:

19:37:37,543 ERROR [io.undertow.request] (default task-40) UT005023: Exception handling request to /admin/users/add-user/add-success: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.ejb.EJBException: java.lang.NullPointerException 
Caused by: java.lang.NullPointerException 
at com.altypaynet.crm.service.user.UserProfileServiceImpl.listUsersProperty(UserProfileServiceImpl.java:249) 
at com.altypaynet.crm.service.user.UserProfileServiceImpl.convertDtoToEntity(UserProfileServiceImpl.java:261) 
at com.altypaynet.crm.service.user.UserProfileServiceImpl.createUserProfile(UserProfileServiceImpl.java:136) 
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.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437) 
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82) 
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93) 
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437) 
at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) 
at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275) 
... 91 more 

而且DTO的,

UserProfileDto:

public class UserProfileDto extends UserBaseDto { 

public UserProfileDto() { 
} 

private List<PropertyDto> propertyList; 

public List<PropertyDto> getPropertyList() { 
    return propertyList; 
} 

public void setPropertyList(List<PropertyDto> propertyList) { 
    this.propertyList = propertyList; 
} 
} 

PropertyDto:

public class PropertyDto extends CompanyDto { 

public PropertyDto() { 
} 

private String propertyId; 

private String propertyNo; 

private String propertyName; 

private String propertyType; 

private Integer propertyUnits; 

private Integer propertyFloors; 

public String getPropertyId() { 
    return propertyId; 
} 

public void setPropertyId(String propertyId) { 
    this.propertyId = propertyId; 
} 

public String getPropertyNo() { 
    return propertyNo; 
} 

public void setPropertyNo(String propertyNo) { 
    this.propertyNo = propertyNo; 
} 

public String getPropertyName() { 
    return propertyName; 
} 

public void setPropertyName(String propertyName) { 
    this.propertyName = propertyName; 
} 

public String getPropertyType() { 
    return propertyType; 
} 

public void setPropertyType(String propertyType) { 
    this.propertyType = propertyType; 
} 

public Integer getPropertyUnits() { 
    return propertyUnits; 
} 

public void setPropertyUnits(Integer propertyUnits) { 
    this.propertyUnits = propertyUnits; 
} 

public Integer getPropertyFloors() { 
    return propertyFloors; 
} 

public void setPropertyFloors(Integer propertyFloors) { 
    this.propertyFloors = propertyFloors; 
} 
} 

我已經嘗試搜索這個,但遺憾的是沒有一個解決我的問題。我希望你能幫助我。謝謝。

注意:也許你們中的一些人可能會問這個屬性與userprofile有什麼關係,我刪除了代碼中包含的一些代碼,我只是發佈了與錯誤相關的代碼。

大注意:厭倦我的壞話。我盡力了。

+0

你永遠不會初始化你的「propertyList」爲null以外的任何東西(列表 propertyList = null;)。所以顯然你會得到一個NPE,當試圖調用propertyList.add(...) –

+0

可能重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/ what-is-a-nullpointerexception-and-how-do-i-fix-it) –

+0

@ 911DidBush List propertyList = null; (PropertyDto propertyDto:propertyDtoList){ propertyList.add(entityManager.find(Property.class,propertyDto.getId())); } return propertyList; 對於每一個它不應該返回null。 – Sytor

回答

0

而不是UserProfileDto bean將PropertyDto傳遞給控制器​​。

PropertyDto.getProperId()將爲您提供用逗號分隔的所有選定值。 由於dto.getPropertyList()不包含任何值,因此您正在獲取空指針。

+0

感謝您的回答,但我無法這麼做,正如我在問題的最後部分所說的那樣,其他代碼也包含在內,我只是將其刪除,因爲我得到的錯誤僅在選擇多個 – Sytor

+0

換句話說,我還有其他需要在UserProfileDto中綁定的輸入,我只是把它給我的代碼移除。 – Sytor

+0

然後你至少需要在UserProfileDto中添加私有字符串propertyId和getter setter。 –

相關問題