Olá. No meu sistema eu tenho uma tabela onde uma lista de objetos são exibidos. E para cada linha da tabela eu crio um select com um lista de opções.
Imagem de exemplo da tela: https://wetransfer.com/downloads/544542e56d3a0b7925ece3a2c5afb67220191016125456/b812de/preview/9bd0c780fe120a75984f0b643ce6c6f020191016125456
Controller:
@RequestMapping(value = "/salvacadastrocombinacao", method = RequestMethod.POST)
public String salvaCadastroCombinacao(Model model, CombinacaoTO novaCombinacao){
model.addAttribute("novaCombinacao", novaCombinacao);
List<AtributoTO> atributosMarketplace = marketplaceService.buscaAtributosPorCategoria(Integer.parseInt(novaCombinacao.getIdGrupoMarketplace()), Integer.parseInt(novaCombinacao.getIdMarketplace()));
model.addAttribute("atributosMarketplace", atributosMarketplace);
List<AtributoTO> atributosVendedor = vendedorService.buscaAtributosPorCategoria(Integer.parseInt(novaCombinacao.getIdGrupoVendedor()), Integer.parseInt(novaCombinacao.getIdVendedor()));
model.addAttribute("atributosVendedor", atributosVendedor);
List<CombinacaoAtributoTO> combinacaoAtributos = new ArrayList<CombinacaoAtributoTO>();
model.addAttribute("combinacaoAtributos", combinacaoAtributos);
return "cadastroCombinacaoAtributos";
}
}
Classes:
public class CombinacaoAtributoTO {
private String idMarketplace;
private String idVendedor;
private String idAtributoMarketplace;
private String idAtributoVendedor;
getters e setter...
}
Minha view:
<tbody>
<th:block th:each="atributoMartketplace,stat : ${atributosMarketplace}">
<tr>
<th scope="row" th:text="${atributoMartketplace.nome}">
<input th:value="${atributoMartketplace.id}" th:field="*{combinacaoAtributos[__${stat.index}__].idAtributoMarketplace}" hidden/>
</th>
<td>
<select class="selectpicker" data-live-search="true" th:field="*{combinacaoAtributos[__${stat.index}__].idAtributoVendedor}">
<option th:value="0">Selecione uma opção</option>
<option th:each="atributoVendedor : ${atributosVendedor}" th:value="${atributoVendedor.id}" th:text="${atributoVendedor.nome}"></option>
</select>
</td>
</tr>
</th:block>
Ele não consegue fazer o bind disso:
List combinacaoAtributos = new ArrayList();
com isso:
th:field="*combinacaoAtributos[${stat.index}].idAtributoMarketplace}"
O seguinte erro é retornado:
Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'combinacaoAtributoWrapper' of bean class [br.com.combinacaotaxonomias.model.CombinacaoAtributoWrapper]: Bean property 'combinacaoAtributoWrapper' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
Já tentei diversas abordagens...