是否可以使用th-field来检索Thymeleaf中列表的值?

问题描述 投票:0回答:2

我在thymeleaf中创建一个页面,我从我的控制器中检索一个列表来安装一个表,在这个表中有一个选择字段,我在其中检索一个值列表,但是我无法显示已经检索到的值数据库可以帮到我吗?请!

我已经尝试使用以下命令但无法恢复该值:

th:field="*{valoresAtributo[__${stat.index}__].valorUsuario}"

我收到以下错误:BindingResult和bean名称的普通目标对象都不可用作请求属性。

<table class="table table-sm table-striped table-bordered"  id="dataTable">
    <thead>             
        <tr><th colspan="4">Valores dos Atributos</th></tr>             
    </thead>
    <tbody> 
        <tr class="text-black">
            <td rowspan="2"> Atributo</td>
            <td rowspan="2"> Local</td>
            <td>Aplicação</td>              
            <td>Usuário</td>
        </tr>
        <tr>
            <td id="vlAppl"></td>               
            <td id="vlUser"></td>
        </tr>
        <tr th:each="valorAtributo, stat : ${valoresAtributo}">
            <td th:text="${valoresAtributo[__${stat.index}__].nomeAtributo}"></td>
            <td th:text="${valoresAtributo[__${stat.index}__].valorLocal}"></td>
            <td th:text="${valoresAtributo[__${stat.index}__].valorAplicaco}"></td>
            <td>
             <select class="form-control col-md-10" th:field="*{valoresAtributo[__${stat.index}__].valorUsuario}">
                    <option th:each="option : ${T(com.jequiti.JequitiIntegrador.controller.AtributoController).test(valorAtributo.sqlValidacao)}"
                                                th:value="${{option.valorAtributo}}"
                                                th:text="${option.significadoAtributo}">
                                        </option>
                </select>
             </td>
            </tr>
        </tbody>
    </table>
@RequestMapping(value="/seguranca/atributo/valores", params = {"atributo","siteOpt","applOpt","userOpt","aplicacao","usuario"}, method = RequestMethod.GET)
    public String initAttributeValuesFormFilter(@RequestParam("atributo") Long idAtributo, @RequestParam("siteOpt") Integer idNivel1, @RequestParam("applOpt") Integer idNivel2, @RequestParam("userOpt") Integer idNivel3, @RequestParam("aplicacao") String aplicacao, @RequestParam("usuario") String usuario, Model model)
    {
        Integer userId = 0;

        if(!Strings.isNullOrEmpty(usuario))
            userId = userServiceImpl.findIdUsuarioByFantasia(usuario).intValue();

        List<ValoresAtributoView> valoresAtributo = buscaValoresAtributos(idAtributo, idNivel1, idNivel2, idNivel3, 0, userId);

        model.addAttribute("opUsuarios", userServiceImpl.findAllActiveUsers());
        model.addAttribute("opAtributos", atributoService.findAll());
        model.addAttribute("valoresAtributo",valoresAtributo);

        return "/valoresAtributo";
    }

我希望该字段显示当前在数据库中的值以及值列表中的选项。

谢谢你们!

java spring-boot thymeleaf spring-el
2个回答
1
投票

如果您在父级th:field标签中使用th:object,则只能使用<form />。 (从您发布的HTML中不清楚 - 但您可能不是因为您将valoresAtributo直接添加为模型属性。)

如果您希望显示预选的<option>但不使用th:objectth:field,您应该使用th:selected属性,该属性应根据是否应该选择该选项来评估truefalse。它应该看起来像这样:

<select class="form-control col-md-10">
    <option
        th:each="option : ${T(com.jequiti.JequitiIntegrador.controller.AtributoController).test(valorAtributo.sqlValidacao)}"
        th:value="${{option.valorAtributo}}"
        th:text="${option.significadoAtributo}"
        th:selected="${valorAtributo.valorUsuario == option.valorAtributo}" />
</select>

0
投票

我用thymeleaf检索列表的方法:

例如列表usersUser实体列表到达html页面:

@GetMapping("/parsing/explorer")
public ModelAndView parsing(){
    ModelAndView modelAndView = new ModelAndView("show");
    modelAndView.addObject("users", generateUsersList());
    return modelAndView;
}

show.html例子:

<table class="w3-table-all w3-card-4">
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Last name</th>
        </tr>
        <tr th:each="user : ${users}"> 
            <td th:text="${user.getId()}"></td>
            <td th:text="${user.getName()}"></td>
            <td th:text="${user.getLastName()}"></td>
        </tr>
    </table>

所以Userusers)的列表被分配给字符串user中的变量<tr th: every = "user: $ {users}">

在下一个代码块中,我们也可以像使用getter一样调用“用户”字段和java,但是Thymeleaf也允许你引用字段:user.id/ user.name ....


确定select块中的变量:

    <select name="userFromHtml" id=userId required>
        <option th:each="user: ${users}">
            <title th:text="${user.getLastName()} + ' ' + ${user.getName()} + ' ' + ${user.getIdIO}" th:value="${user.getId()}"/>
        </option>
    </select>

在这种情况下,有必要确定th:value区块中的titleth:value="${user.getId()}"。因此,在控制器中传递变量userFromHtml,其值为所选用户的id

PS尽管Thymeleaf允许您直接定义变量,但我更喜欢使用getter来获取数据。

© www.soinside.com 2019 - 2024. All rights reserved.