Java SpringWebFlow:虽然映射值在httprequest中,但绑定不适用于映射

Java SpringWebFlow:虽然映射值在httprequest中,但绑定不适用于映射,java,spring,spring-webflow,Java,Spring,Spring Webflow,这个问题与这个问题非常相似: 我试图做的是将JSP中的一组复选框映射到webflow中的映射。例如,将字符串绑定到模型的工作非常好。然而,地图上没有。下面是一些示例代码: 模型: public class MyForm { private String selectedOrderBy; private Map<String, boolean> selected = new HashMap<>(); private List<MyClass> it

这个问题与这个问题非常相似:

我试图做的是将JSP中的一组复选框映射到webflow中的映射。例如,将字符串绑定到模型的工作非常好。然而,地图上没有。下面是一些示例代码: 模型:

public class MyForm {
  private String selectedOrderBy;
  private Map<String, boolean> selected = new HashMap<>();
  private List<MyClass> items = new ArrayList<>();
  //Now setters and getters for the members
}

public MyClass {
  private String hash = "<some hash>"; //plus getter and setter
}
复选框成功显示在地图中找到的值。但是,在提交时,更改的值不会绑定到模型(而字符串“selectOrderBy”起作用)。因此,我调试到MyService#saveSelection中,发现模型中的映射仍然具有旧值。同时,新值实际上在请求中

所以目前,我手动从请求中提取它们:

String selected = request.getParameter("selected['" + hash + "']");
但这是一个相当丑陋的解决办法。有人知道为什么会这样吗

您好,
萨沙

我无法解决最初的问题。然而,通过使用列表而不是映射来绑定值,我能够以更干净的方式实现类似的结果。JSP现在显示:

<form:checkbox path="selectedList" value="${myClass.hash}"/>

表格:

public class MyForm {
  private String selectedOrderBy;
  private List<String> selectedList = new ArrayList<>(); //selected Items hashes
  private List<MyClass> items = new ArrayList<>(); //All items, regardless of selectionstate
  //Now setters and getters for the members
}
公共类MyForm{
按顺序选择的私有字符串;
私有列表selectedList=new ArrayList();//选定项哈希
private List items=new ArrayList();//所有项目,无论选择状态如何
//现在,为成员设置setters和getter
}
在服务中,模型现在包含所选项目的列表。通过将其与可用项列表(散列)进行比较,基本上可以得到相同的结果


你好

我无法解决最初的问题。然而,通过使用列表而不是映射来绑定值,我能够以更干净的方式实现类似的结果。JSP现在显示:

<form:checkbox path="selectedList" value="${myClass.hash}"/>

表格:

public class MyForm {
  private String selectedOrderBy;
  private List<String> selectedList = new ArrayList<>(); //selected Items hashes
  private List<MyClass> items = new ArrayList<>(); //All items, regardless of selectionstate
  //Now setters and getters for the members
}
公共类MyForm{
按顺序选择的私有字符串;
私有列表selectedList=new ArrayList();//选定项哈希
private List items=new ArrayList();//所有项目,无论选择状态如何
//现在,为成员设置setters和getter
}
在服务中,模型现在包含所选项目的列表。通过将其与可用项列表(散列)进行比较,基本上可以得到相同的结果


你好

删除绑定限制可以使您的示例正常工作。我发现了一些改进请求,允许在绑定属性上使用通配符,这似乎是在3.0.0()版本中添加的

因此,为了使您的示例能够工作,我只需删除绑定限制

<view-state id="selection" model="model">
    <transition on="submit" to="saveSelection"/>
</view-state>


另外,请注意,通过设置value=“true”,默认情况下您将选择所有类。

删除绑定限制将使示例正常工作。我发现了一些改进请求,允许在绑定属性上使用通配符,这似乎是在3.0.0()版本中添加的

因此,为了使您的示例能够工作,我只需删除绑定限制

<view-state id="selection" model="model">
    <transition on="submit" to="saveSelection"/>
</view-state>


另外,请注意,通过设置value=“true”,默认情况下您将选择所有类。

我也使用过此解决方案一次。我不知道一个优雅的我也用过这个解决方案。我不知道一个优雅的