1

org.springframework.web.util.NestedServletException: リクエストの処理に失敗しました。ネストされた例外は java.lang.NumberFormatException: For input string: ""

注釈、Java、JSP、Spring データ、Spring MVC、および mongo db のみを使用して Web アプリを構築しようとしています。

おおむね動作していますが、複数選択リストを含む JSP フォームを作成しようとすると、タイトル エラーが発生します。

エージェント オブジェクトを作成して mongodb データベースに保存しようとしています。複数選択ボックスは、選択されたオブジェクトの文字列 ID を返しています。エージェント オブジェクトには、複数選択リストを入力する必要があるリストがあります。

Chrome 開発ツールからの応答データは次のとおりです。

id: name:Test1 type:MOB
attributeList[]:687a1964-4179-4631-832b-e23b34300840
personalityTraitList[]:8b321f3c-6398-4bc4-afc6-e6c7e4a6a3e3
skillList[]:53090226-0f54-4121-90c0-4d3a188aa5f8
triggerList[]:923048ef-7a4d-42e3-8691-2d2e9603e79b
behaviorTreeList[]:84966b7a-fb53-4f64-be2a-203ae3743250

最初の複数選択ボックスの html は次のとおりです。それらはすべて同じです。

<td align="left">
    <select size="10" id="selectedAttributes" multiple="multiple" name="attributeList[${attribute.id}]" style="width: 130px;"></select>
</td>

コントローラの保存リクエストのマッピングは次のとおりです。

@RequestMapping(value = "/AgentManager/save", method = RequestMethod.POST)  
public View createAgent(@ModelAttribute Agent agent, ModelMap model) 
{
    if(StringUtils.hasText(agent.getId())) 
    {
        agentService.updateAgent(agent);
    } else 
    {
        agentService.addAgent(agent);
    }

    return new RedirectView("/MotherNatureEmulator/AgentManager");  
}

エージェントを保存するときに ID フィールドが空の場合、エージェント サービスはランダムな UUID を作成します。

スタック トレースは次のとおりです。

java.lang.NumberFormatException: 入力文字列の場合: "" java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) java.lang.Integer.parseInt(Integer.java:504) java.lang.Integer.parseInt(Integer. java:527) org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:969) org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:902) org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java: 75) org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:740) org.springframework.validation.DataBinder.doBind(DataBinder.java:636) org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java: 191) org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:112) org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.bindRequestParameters(ServletModelAttributeMethodProcessor.java:153) org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java: 106) org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) org.springframework.web.method. support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:123) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal( RequestMappingHandlerAdapter.java:686) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) org.springframework. web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) javax.servlet.http.HttpServlet.service(HttpServlet.java:647) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

カスタム データ バインダーを作成しようとしましたが、役に立ちませんでした。

誰かがこれらのことを行う正しい方法に私を導くことができますか? 自分でWebアプリを作るのは初めてです。

エージェント クラスは次のとおりです。

@Document(collection = "AgentCollection")
public class Agent 
{
@Id
private String _id;

private String _name;
private String _type;
private ArrayList<String> _actionList;
private ArrayList<String> _attributeList;
private ArrayList<String> _behaviorTreeList;
private ArrayList<String> _itemList;
private ArrayList<String> _personalityTraitList;
private ArrayList<String> _skillList;
private ArrayList<String> _triggerList;


public String getId() 
{
    return _id;
}


public void setId(String id) 
{
    _id = id;
}


public String getName() 
{
    return _name;
}


public void setName(String name)
{
    _name = name;
}


public String getType() 
{
    return _type;
}


public void setType(String type)
{
    _type = type;
}


public ArrayList<String> getAttributeList()
{
    return _attributeList;
}


public void setAttributeList(final ArrayList<String> attributeList)
{
    _attributeList = attributeList;
}


public ArrayList<String> getPresonalityTraitList()
{
    return _personalityTraitList;
}


public void setPersonalityTraitList(final ArrayList<String> personalityTraitList)
{
    _personalityTraitList = personalityTraitList;
}


public ArrayList<String> getSkillList()
{
    return _skillList;
}


public void setSkillList(final ArrayList<String> skillList)
{
    _skillList = skillList;
}


public ArrayList<String> getActionList()
{
    return _actionList;
}


public void setActionList(final ArrayList<String> actionList)
{
    _actionList = actionList;
}


public ArrayList<String> getTriggerList()
{
    return _triggerList;
}


public void setTriggerList(final ArrayList<String> triggerList)
{
    _triggerList = triggerList;
}


public ArrayList<String> getItemList()
{
    return _itemList;
}


public void setItemList(final ArrayList<String> itemList)
{
    _itemList = itemList;
}


public ArrayList<String> getBehaviorTreeList()
{
    return _behaviorTreeList;
}


public void setBehaviorTreeList(final ArrayList<String> behaviorTreeList)
{
    _behaviorTreeList = behaviorTreeList;
}
}

ありがとう、マット

4

1 に答える 1

0

Spring は空の角かっこを処理しません。要約すると、使用できます

  • ?myarray[0]=aa&myarray[1]=bb
  • ?myarray=aa&myarray=bb

だがしかし

  • ?myarray[]=aa&myarray[]=bb

チケットhttps://jira.springsource.org/browse/SPR-11214を作成しました

于 2013-12-12T13:59:03.367 に答える