我在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";
}
我希望该字段显示当前在数据库中的值以及值列表中的选项。
谢谢你们!
如果您在父级th:field
标签中使用th:object
,则只能使用<form />
。 (从您发布的HTML中不清楚 - 但您可能不是因为您将valoresAtributo
直接添加为模型属性。)
如果您希望显示预选的<option>
但不使用th:object
和th:field
,您应该使用th:selected
属性,该属性应根据是否应该选择该选项来评估true
或false
。它应该看起来像这样:
<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>
我用thymeleaf检索列表的方法:
例如列表users
与User
实体列表到达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>
所以User
(users
)的列表被分配给字符串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
区块中的title
:th:value="${user.getId()}"
。因此,在控制器中传递变量userFromHtml
,其值为所选用户的id
。
PS尽管Thymeleaf允许您直接定义变量,但我更喜欢使用getter来获取数据。