如何在数据库中保存选择多个

时间:2016-10-13 12:32:47

标签: java html multi-select dto

这是我第一次在这里发帖。我有一个关于如何将来自“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的关系是什么,我删除了代码中包含的一些代码,我只是发布与错误相关的代码。

大注意:对我不好的英语抱歉。我最好的。

1 个答案:

答案 0 :(得分:0)

而不是UserProfileDto bean将PropertyDto传递给控制器​​。

PropertyDto.getProperId()将为您提供由逗号分隔的所有选定值。 你得到空指针,因为dto.getPropertyList()不包含任何值。