2015-06-01 3 views
1

У меня есть эта Expeption и не знаю, как ее решить ...с: Foreach с ArrayList формы: Флажок

У меня есть булева список ведьмы я хочу заполнить JSP, имена флажка в другой список String, если есть 3 строки в списке должны быть 3 флажки, если 4 Strings, затем 4 и так далее

Вот моя JSP

<form:form action="/SpringMVC/dbChanges/form" commandName="index" method="POST"> 
    <div> 
     <h2>neu anlegen:</h2> 
     <table> 
      <tr><td>Name:&nbsp;<form:input path="name" style="float: right"/></td><td><div class="errors"><form:errors path="name"/></div></td></tr> 
      <tr><td>Datum:&nbsp;<form:input path="date" style="float: right"/></td><td><div class="errors"><form:errors path="date"/></div></td></tr> 
      <tr><td>Nummer:&nbsp;<form:input path="number" style="float: right"/></td><td><div class="errors"><form:errors path="number"/></div></td></tr> 
      <c:forEach var="systemListEntry" items="${systemList}" varStatus="status"> 
       <tr><td>${systemListEntry.name}: <form:checkbox path="system[${status.index}]" style="float: right"/></td></tr> 
      </c:forEach> 
     </table> 
     <input type="submit" value="Speichern" /> 
    </div> 
</form:form> 

Вот метод в моем контроллере:

@Controller 
@RequestMapping("/dbChanges") 
@SessionAttributes("changes") 
public class DbChangesControllerImpl implements DbChangeController { 

private DbChangeService dbChangeService; 
private DbChangeValidator validator; 

@Autowired 
public DbChangesControllerImpl(final DbChangeValidator pValidator, 
     final DbChangeService pDbChangeService) { 
    validator = pValidator; 
    dbChangeService = pDbChangeService; 
} 

// Changes // 

@Override 
@RequestMapping(value = "index.html", method = RequestMethod.GET) 
public ModelAndView getChanges() { 

    final List<DbChange> list = dbChangeService.getDbEntrys(); 

    final ModelAndView model = new ModelAndView("index", "index", 
      new DbChange()); 
    model.addObject("dbChanges", list); 
    model.addObject("systemList", dbChangeService.getSystems()); 

    model.addObject("year", 
      java.util.Calendar.getInstance().get(java.util.Calendar.YEAR)); 

    return model; 
} 
... 

dbChangeService.getSystems() возвращает список FdcSystems:

public class FdcSystem { 
private String oid; 
private String name; 

public String getName() { 
    return name; 
} 

public void setName(final String pName) { 
    name = pName; 
} 

public String getOid() { 
    return oid; 
} 
} 

и мой dbChange объект, который связан с "индексом" здесь:

package com.bla.dbchanges; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* 
* @author Fabio Stuber 
* 
*/ 
// TODO: Impl machen 
public class DbChange { 
private String name; 
private String date; 
private int number; 
private List<Boolean> systems; 

private String oid; 

/** 
* Konstruktor ohne Id für die Tests 
*/ 
public DbChange(final String pName, final String pDate, final int pNumber) { 
    name = pName; 
    date = pDate; 
    number = pNumber; 
} 

public DbChange(final String pOid, final String pName, final String pDate, final int pNumber) { 
    oid = pOid; 
    name = pName; 
    date = pDate; 
    number = pNumber; 
} 

/** 
* default Konstruktor, vom JSP benötigt 
*/ 
public DbChange() { 
    systems = new ArrayList<Boolean>(); 
} 

public String getName() { 
    return name; 
} 

public void setName(final String pName) { 
    name = pName; 
} 

public String getDate() { 
    return date; 
} 

public void setDate(final String pDate) { 
    date = pDate; 
} 

public int getNumber() { 
    return number; 
} 

public void setNumber(final int pNumber) { 
    number = pNumber; 
} 

public String getOid() { 
    return oid; 
} 

public void setOid(final String pOid) { 
    oid = pOid; 
} 

public List<Boolean> getSystems() { 
    return systems; 
} 

public void setSystems(final List<Boolean> pSystems) { 
    systems = pSystems; 
} 

public void addSystem(final Boolean system) { 
    systems.add(system); 
} 

} 

dbChangesServiceImpl

package com.bla.dbchanges; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

import org.springframework.beans.factory.annotation.Autowired; 

import com.bla.dbchanges.context.DbChangeFactory; 
import com.bla.dbchanges.model.FdcDbchange; 
import com.bla.dbchanges.model.FdcSystem; 

public class DbChangeServiceImpl implements DbChangeService { 
private final DbChangeDataStoreManager manager; 
private final DbChangeFactory factory; 

@Autowired 
public DbChangeServiceImpl(final DbChangeDataStoreManager pNewManager, 
     final DbChangeFactory pFactory) { 
    manager = pNewManager; 
    factory = pFactory; 
} 

private Date convertStringToDate(final String date) { 
    Date parsedDate = new Date(); 

    try { 
     parsedDate = new SimpleDateFormat("dd.MM.yyyy").parse(date); 
    } catch (final ParseException e) { 
     e.printStackTrace(); 
    } 

    return parsedDate; 
} 

@Override 
public List<DbChange> getDbEntrys() { 
    final List<DbChange> list = new ArrayList<DbChange>(); 

    for (final FdcDbchange fdcChange : manager.getAllChanges()) { 
     list.add(factory.createDbChange(fdcChange)); 
    } 

    return list; 
} 

@Override 
public DbChange getSingleChange(final String pOid) { 
    final FdcDbchange change = manager.getSingleChange(pOid); 

    return factory.createDbChange(change); 
} 

// TODO: Error, er will statt auf meinen schon vorhandenen Eintrag 
// zuzugreiffen, einen neuen erstellen mit der gleichen OID 
@Override 
public void saveChange(final DbChange pChange) { 
    final FdcDbchange change = factory.createFdcDbchange(); 
    final Set<FdcSystem> systems = new HashSet<FdcSystem>(); 
    final List<FdcSystem> allSystems = manager.getAllSystems(); 

    // TODO: evtl Chain sobald error gefixt ist 
    if (pChange.getTwa()) { 
     systems.add(allSystems.get(0)); 
    } 
    if (pChange.getIwa()) { 
     systems.add(allSystems.get(1)); 
    } 
    if (pChange.getPwa()) { 
     systems.add(allSystems.get(2)); 
    } 

    change.setChangeDate(convertStringToDate(pChange.getDate())); 
    change.setChangeName(pChange.getName()); 
    change.setChangeNumber(pChange.getNumber()); 
    change.setSystems(systems); 

    manager.saveChange(change); 
} 

@Override 
public void delete(final String pOid) { 
    final FdcDbchange changeToDelete = manager.getSingleChange(pOid); 

    manager.deleteChange(changeToDelete); 
} 

@Override 
public void editChange(final DbChange pNewChange) { 
    final FdcDbchange changeToEdit = manager.getSingleChange(pNewChange 
      .getOid()); 
    final List<FdcSystem> allSystems = manager.getAllSystems(); 
    final Set<FdcSystem> systems = new HashSet<FdcSystem>(); 

    // TODO: hier die selbe Chain 
    if (pNewChange.getTwa()) { 
     systems.add(allSystems.get(0)); 
    } 
    if (pNewChange.getIwa()) { 
     systems.add(allSystems.get(1)); 
    } 
    if (pNewChange.getPwa()) { 
     systems.add(allSystems.get(2)); 
    } 

    changeToEdit.setSystems(systems); 

    manager.editChange(changeToEdit); 
} 

@Override 
public List<FdcSystem> getSystems() { 
    final List<String> systems = new ArrayList<String>(); 
    // for (final FdcSystem system : manager.getAllSystems()) { 
    // systems.add(system.getName()); 
    // } 

    return manager.getAllSystems(); 
} 

}

, наконец, мое исключение:

SCHWERWIEGEND: инвалидное свойство 'система [0] класс боба [com.bla.dbchanges.DbChange]: Незаконная попытка получить 'систему' собственности бросила исключение; Вложенное исключение - org.springframework.beans.NullValueInNestedPathException: Недопустимые свойства «систем» класса bean [com.bla.dbchanges.DbChange]: не удалось создать тип свойства [java.lang.Boolean] для автоматического роста пути вложенного свойства: java .lang.InstantiationException: java.lang.Boolean org.springframework.beans.InvalidPropertyException: Недействительные системы свойств [0] 'из класса bean [com.bla.dbchanges.DbChange]: Незаконная попытка получить систему свойств «исключение» ; Вложенное исключение - org.springframework.beans.NullValueInNestedPathException: Недопустимые свойства «систем» класса bean [com.bla.dbchanges.DbChange]: не удалось создать тип свойства [java.lang.Boolean] для автоматического роста пути вложенного свойства: java .lang.InstantiationException: java.lang.Boolean на org.springframework.beans.BeanWrapperImpl.getPropertyValue (BeanWrapperImpl.java:827) на org.springframework.beans.BeanWrapperImpl.getPropertyValue (BeanWrapperImpl.java:699) в орг. springframework.validation.AbstractPropertyBindingResult.getActualFieldValue (AbstractPropertyBindingResult.java:99) на org.springframework.validation.AbstractBindingResult.getFieldValue (AbstractBindingResult.java:218) на org.springframework.web.servlet.support.BindStatus. (BindStatus.java : 120) at org.springframework.web.servle t.tags.form.AbstractDataBoundFormElementTag.getBindStatus (AbstractDataBoundFormElementTag.java:179) на org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath (AbstractDataBoundFormElementTag.java:199) на org.springframework.web.servlet. tags.form.AbstractDataBoundFormElementTag.getName (AbstractDataBoundFormElementTag.java:165) на org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId (AbstractDataBoundFormElementTag.java:152) на org.springframework.web.servlet.tags. form.AbstractCheckedElementTag.autogenerateId (AbstractCheckedElementTag.java:81) на org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId (AbstractDataBoundFormElementTag.java:143) на org.springframework.web.servlet.tags.form. AbstractSin gleCheckedElementTag.writeTagContent (AbstractSingleCheckedElementTag.java:83) at org.springframework.web.servlet.tags.form.CheckboxTag.writeTagContent (CheckboxTag.java:53) at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal (AbstractFormTag.java:103) at org.springframework. web.servlet.tags.RequestContextAwareTag.doStartTag (RequestContextAwareTag.java:80) на org.apache.jsp.WEB_002dINF.pages.index_jsp._jspx_meth_form_005fcheckbox_005f0 (index_jsp.java:851) на org.apache.jsp.WEB_002dINF.pages. index_jsp._jspx_meth_c_005fforEach_005f3 (index_jsp.java:814) на org.apache.jsp.WEB_002dINF.pages.index_jsp._jspService (index_jsp.java:242) на org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java: 70) по адресу javax.servlet.http.HttpServlet.service (HttpServlet.java:727) at org.apache.jasper.servle t.JspServletWrapper.service (JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service (JspServlet.java: 334) в javax.servlet.http.HttpServlet.service (HttpServlet.java:727) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:303) в org.apache.catalina.core. ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) at org.apache.catalina.core.ApplicationDispatcher.invoke (ApplicationDispatcher.java:748) at org.apache.catalina.core.ApplicationDispatcher.processRequest (ApplicationDispatcher.java:486) at org.apache.catalina.core.ApplicationDispatcher.doForward (ApplicationDispatcher.java:411) на org.apache.catalina.core.ApplicationDispatcher.forward (ApplicationDispatcher.java:338) в org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel (InternalResourceView.java:238) в org.springframework.web. servlet.view.AbstractView.render (AbstractView.java:264) at org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1208) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult (DispatcherServlet. Java: 992) на org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:939) на org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:856) на org.springframework. web.servlet.FrameworkServlet.processRequest (Фрам eworkServlet.java:920) на org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:816) на javax.servlet.http.HttpServlet.service (HttpServlet.java:620) в org.springframework. web.servlet.FrameworkServlet.service (FrameworkServlet.java:801) at javax.servlet.http.HttpServlet.service (HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java: 303) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:220) в org.apache.catalina. core.StandardContextValve.invoke (StandardContextValve.java:122) at org.apach e.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:501) по адресу org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:170) по адресу org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:116) at org. apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1040) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:607) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.(JIoEndpoint.java:315) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) на java. lang.Thread.run (Thread.java:745) Вызвано: org.springframework.beans.NullValueInNestedPathException: Недействительные свойства «систем» класса bean [com.bla.dbchanges.DbChange]: не удалось создать экземпляр свойства типа [java. lang.Boolean], чтобы автоматически расти путь вложенного свойства: java.lang.InstantiationException: java.lang.Boolean at org.springframework.beans.BeanWrapperImpl.newValue (BeanWrapperImpl.java:633) at org.springframework.beans.BeanWrapperImpl .growCollectionIfNecessary (BeanWrapperImpl.java:865) at org.springframework.beans.BeanWrapperImpl.getPropertyValue (BeanWrapperImpl .java: 770) ... 56 more

Может ли кто-нибудь помочь мне с этой проблемой?

+1

попробуйте использовать систему вместо системы, как вы определили вар = «система», а не «системы» –

+0

хмм, но Системс Имя моего BooleanList в dbChanges.java где находятся данные (например, имя, дата и номер) – Fischmaster3001

+0

где переменная dbChange с именем «index» в вашей FdcSystem. Я думаю, что он передан как другой список, который я не вижу в вашей части обзора. –

ответ

0

найдено решение, изменили список в набор в DbChanges.java:

private Set<String> systems; 

и изменил JSP на:

<c:forEach var="systemListEntry" items="${systemList}"> 
    <tr><td>${systemListEntry.name}: <form:checkbox path="systems" value="${systemListEntry.name}" style="float: right"/></td></tr> 
</c:forEach> 
0

У вас есть опечатка в коде.

Rplace

${system.name}: <form:checkbox path="systems[${status.index}]" style="float: right"/> 

Линия с

${system.name}: <form:checkbox path="system[${status.index}]" style="float: right"/> 

В имени переменной system и не systems

+0

Нет, не работает: 'SCHWERWIEGEND: Invalid property 'system [0]' из bean-класса [com.bechtle .dbchanges.DbChange]: система свойств бина [0] 'не читается или имеет недопустимый метод getter: соответствует ли тип возвращаемого значения getter параметру типа установщика? ' – Fischmaster3001

+0

. Добавьте класс dbChangeService. –

+0

ok, добавь его – Fischmaster3001