这是我第一次在这里发帖。我有一个关于如何将来自“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 :(得分:0)
而不是UserProfileDto bean将PropertyDto传递给控制器。
PropertyDto.getProperId()将为您提供由逗号分隔的所有选定值。 你得到空指针,因为dto.getPropertyList()不包含任何值。