【问题标题】:Struts2 preselected checkboxlistStruts2 预选复选框列表
【发布时间】:2016-04-07 15:14:53
【问题描述】:

我已经在我发现的类似情况下尝试了所有解决方案,但没有运气。

我的jsp。

<s:checkboxlist list = "positionsMap"
             listKey = "%{key.toString()}"
           listValue = "%{value}"
                name = "selectedPositions"
               value = "positionName"
               label = "Position" />

positionsMap是一个Hashmap,键为positionId,值为positionName

selectedPositions 是一个填充了预检查位置的列表。用调试器测试并从数据库中获取正确的值。 positions 是一个带有 id 和 name 的列表。 所以我的问题是如何显示预先选中的存储在selectedPositions 中的复选框。 我得到的结果是所有复选框都未选中。 如果有什么不清楚的请问我。 提前致谢!

更多信息:

private Object1 object= new Object1();
private List<Position> positionList = new ArrayList<>();
private List<Position> selectedPositions = new ArrayList<Position>();
private String positionName = new String();
private Map<Long,String> positionsMap = new HashMap<Long, String>();

//getters, setters

@Inject
transient ObjectDAO objectDAO;
@Inject
transient PositionDAO positionDAO;

public String edit() {
    HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);    
    object= objectDAO.listById(Long.parseLong(request.getParameter("id")));
    positionList = positionDAO.listPositions();
    selectedPositions = object.getPositions();
    for (int i = 0; i < positionList.size(); i++) {
        Position row = (Position) positionList.get(i);
        Long id = row.getPositionId();
        positionName = row.getPositionName();
        positionsMap.put(id, positionName);         
    }       
    return SUCCESS;
}

【问题讨论】:

    标签: java jsp struts2 checkboxlist


    【解决方案1】:

    看到代码,我会改变策略:使用OGNL的列表投影功能从List&lt;Position&gt;创建一个List&lt;Long&gt;,然后正确设置密钥:

    <s:checkboxlist list = "positionsMap"
                    name = "selectedPositions"
                   value = "selectedPositions.{positionId}"
                   label = "Position" />
    

    【讨论】:

    • 这是安德里亚!非常感谢,我尝试了几天,显然类似主题的所有其他答案都不起作用......
    • 如果我想提交检查的值并再次将它们保存到数据库怎么办?在我最初的示例中,我没有预先检查的值,但是当我检查它们提交并保存到数据库的位置时。现在,在您的示例之后,我已经预先检查了职位(这是我想要实现的,当然安德里亚您回答了我的问题,但是当我点击提交时它不起作用)。如果您有任何想法,请分享。谢谢!
    • 很奇怪,因为发送回操作时唯一重要的是name(目标列表)和listKey(指定发送到目标列表的内容),以及两者都没有改变。仔细检查您可能在此过程中所做的破坏了事情的事情:>
    • 要解决第二个问题,我必须将“名称”更改为我在保存方法中使用的列表名称List&lt;Long&gt; positionsSelected。所以value = "selectedPositions.{positionId}"name = "positionsSelected" 将使其适用于提交新条目,或使用预选复选框编辑条目。
    • 绝对!混乱的结构混淆了简单的事实:S BTW,许多事情可以在答案中发布的代码中改进/简化......如果你在codereview.stackexchange.com上提问,我很乐意讨论(类似于stackoverflow,但面向改进工作软件,而不是解决阻塞问题),如果你有兴趣
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多