首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表项显示为复选框--既不是BindingResult,也不是普通可用的

将列表项显示为复选框--既不是BindingResult,也不是普通可用的
EN

Stack Overflow用户
提问于 2016-10-30 13:02:47
回答 1查看 50关注 0票数 0

我有以下目标。

代码语言:javascript
复制
public class Anonymization {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @OneToMany(mappedBy = "anonymization")
    private List<Host> hosts;
    @OneToMany(mappedBy = "anonymization")
    private List<Item> items;

对象HostItem有几个布尔字段。我想要显示一个表单,其中所有的主机和项目对象都显示为复选框,以便可以编辑布尔字段。我写了一个控制器来显示表单

代码语言:javascript
复制
@RequestMapping("monitoringsystem/{mId}/anonymization")
    public String editAnonymisatzion(Model model, @PathVariable Long mId){
        model.addAttribute("mId", mId);
        model.addAttribute("anonymization", monitoringSystemRepository.findOne(mId).getAnonymization());
        return "monitoringsystem/anonymizationForm";
    }

anonymizationForm应该在for-each循环中显示复选框。

代码语言:javascript
复制
<!-- more code --->
<form class="form-horizontal" th:modelAttribute="anonymization" th:object="${anonymization}" th:action="@{'monitoringsystem/' + ${mId} + '/anonymisatzion/save'}" method="post">
            <input type="hidden" th:field="*{id}"/>
            <fieldset>
                <legend>Set Anonymization</legend>
                <div class="panel panel-default">
                    <div class="panel-heading">Anonymizie Hostnames</div>
                    <div class="panel-body">
                        <div class="form-group" th:each="host : ${anonymization.hosts}">
                            <label class="col-md-4 control-label" for="checkboxes" th:text="${host.name}"></label>
                            <div class="col-md-4">
                                <div class="checkbox">
                                    <label for="checkboxes-0">
                                        <input th:field="${host.anonymizeName}" type="checkbox" /> 
                                        anonymizie
                                    </label>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="panel panel-default">
                    <div class="panel-heading">Anonymizie Items</div>
                    <div class="panel-body">
                        <div class="form-group" th:each="item : ${anonymization.items}">
                            <label class="col-md-4 control-label" for="checkboxes" th:text="${item.name}"></label>
                            <div class="col-md-4">
                                <div class="checkbox">
                                    <label for="checkboxes-0">
                                        <input th:field="${item.anonymizeName}" type="checkbox" /> 
                                        anonymizie name
                                    </label>
                                </div>
                                <div class="checkbox">
                                    <label for="checkboxes-0">
                                        <input th:field="${item.anonymizeData}" type="checkbox" /> 
                                        anonymizie data
                                    </label>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
<!-- more code --->

不幸的是,当我调用视图时,我得到了以下错误

代码语言:javascript
复制
Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'host' available as request attribute 

我检查我的数据库所有的关系是正确的设置。List<Host>应该包含1和List<Item> 2条目。

我找不到我的错误。

更新1:

我调试了传递给窗体的匿名对象。已经完成了。这意味着所有的列表条目都存在。因此,我想这个错误与我的观点有关--我如何调用对象。

EN

回答 1

Stack Overflow用户

发布于 2016-10-30 13:48:51

我通过我自己找到了解决方案。首先,我改变了在表单中调用列表对象的方式。

代码语言:javascript
复制
<form class="form-horizontal" th:modelAttribute="anonymization" th:object="${anonymization}" th:action="@{'monitoringsystem/' + ${mId} + '/anonymisatzion/save'}" method="post">
        <input type="hidden" th:field="*{id}"/>
        <fieldset>
            <legend>Set Anonymization</legend>
            <div class="panel panel-default">
                <div class="panel-heading">Anonymizie Hostnames</div>
                <div class="panel-body">
                    <div class="form-group" th:each="host, statHost : *{hosts}">
                        <label class="col-md-4 control-label" for="checkboxes" th:text="*{hosts[__${statHost.index}__].name}"></label>
                        <div class="col-md-4">
                            <div class="checkbox">
                                <label for="checkboxes-0">
                                    <input th:field="*{hosts[__${statHost.index}__].anonymizeName}" type="checkbox" /> 
                                    anonymizie
                                </label>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="panel panel-default">
                <div class="panel-heading">Anonymizie Items</div>
                <div class="panel-body">
                    <div class="form-group" th:each="item, statItem : *{items}">
                        <label class="col-md-4 control-label" for="checkboxes" th:text="*{items[__${statItem.index}__].name}"></label>
                        <div class="col-md-4">
                            <div class="checkbox">
                                <label for="checkboxes-0">
                                    <input th:field="*{items[__${statItem.index}__].anonymizeName}" type="checkbox" /> 
                                    anonymizie name
                                </label>
                            </div>
                            <div class="checkbox">
                                <label for="checkboxes-0">
                                    <input th:field="*{items[__${statItem.index}__].anonymizeData}" type="checkbox" /> 
                                    anonymizie data
                                </label>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="panel panel-default">
                <div class="panel-body">
                    <div class="form-group">
                        <label class="col-md-4 control-label" for="singlebutton"></label>
                        <div class="col-md-4">
                            <a th:href="@{/monitoringsystem}" class="btn btn-default btn-small">Cancel</a> <button id="singlebutton" name="singlebutton" class="btn btn-primary btn-small">Submit</button>
                        </div>
                    </div>
                </div>
            </div>
        </fieldset>
    </form>

此外,似乎有一个问题,命名的getter和策划者。我的就像:

代码语言:javascript
复制
setBoolean(boolean b){
    this.b = b;
}

isBoolean(){
    return b;
}

Spring或thymeleaf (我不知道哪个组件负责)似乎需要getter从get开始。在改变了这个之后,它现在开始工作了。

代码语言:javascript
复制
setBoolean(boolean b){
    this.b = b;
}

getBoolean(){
    return b;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40329419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档