Tenho um método de pesquisa a qual busca um dispositivo via o numero do patrimônio.
// Buscar Dispositivos
@SuppressWarnings("unchecked")
public List<Dispositivo> busca(String patrimonio) {
return getTemplate().findByCriteria(
DetachedCriteria.forClass(Dispositivo.class).add(
Restrictions.ilike("patrimonio", patrimonio,
MatchMode.ANYWHERE)));
}
Porem gostaria de selecionar vários patrimônios ao mesmo tempo e ter vários resultados ao mesmo tempo ?
Receba uma lista de patrimonio e retorne um mapa com chave e valor.
Cada chave desse mapa é um patrimonio e o valor correspondente é uma lista de dispositivos para esse patrimonio.
Nao estou conseguindo passar a lista para o controller:
Formulario:
<form action="${pageContext.request.contextPath}/busca" method="post">
<c:forEach items="${dispositivoList}" var="dispositivo">
<tr>
<td><input type="checkbox" name="patrimonio" value="${dispositivo.patrimonio}"> </td>
<td id="patrimonio">${dispositivo.patrimonio}</td>
</tr>
</c:forEach>
<button type="submit" class="bt_cadastrarDispositivo">Pesquisar</button>
</form>
Controller: public void busca(List<Dispositivo> dispositivo) {
...
}
O problema é por que o nome deles estão diferentes.
No campo name do seu checkbox deve ser o mesmo que o parâmetro que você está recebendo.
<form action="${pageContext.request.contextPath}/busca" method="post">
<c:forEach items="${dispositivoList}" var="dispositivo" varStatus="status">
<tr>
<td><input type="checkbox" name="dispositivo[${status.index}].patrimonio" value="${dispositivo.patrimonio}"> </td>
<td id="patrimonio">${dispositivo.patrimonio}</td> <!-- //Cuidado com essa linha pois você está setando o mesmo ID para vários TDs, em alguns browsers isso dá pau.-->
</tr>
</c:forEach>
<button type="submit" class="bt_cadastrarDispositivo">Pesquisar</button>
</form>
Eu tentei dessa maneira porem ele nao vai para o metodo no controller.
na action do form:
action="${pageContext.request.contextPath}/<nomeDoController>/busca"
faltou esse nome do controller… ou colocar @Get("/busca") no método
Vai tudo vazio?
Ou ele nem chega a executar a action?
Entao esta indo tudo nullo para o controller.
O metodo abaixo e so para ver o que esta chegando no controller:
@Get
public void busca(List<Dispositivo> dispositivo) {
List<Dispositivo> teste = dispositivo;
System.out.print(teste);
}
pra preencher essa lista, algum checkbox precisa estar selecionado, e os checkboxes precisam estar com os names e values de acordo com o que vc quer setar:
<input type="checkbox" name="dispositivo[${status.index}].patrimonio.id" value="${dispositivo.patrimonio.id}">
isso se vc tá setando o id do patrimonio… ou patrimonio é o id do dispositivo?
do jeito que vc tá fazendo tanto o name qto o value deveriam usar o id do dispositivo?
Estou querendo setar o patrimônio do Dispositivo.
E através desse lista fazer uma consulta no banco de dispositivos com esses patrimônios.
se patrimônio é uma entidade, vc tem que setar o id dele… o ${dispositivo.patrimonio} não coloca o patrimonio no input, coloca o toString() dele… vc precisa trabalhar sempre com ids, qdo vc tá brincando com entidades.
Acho que não soube me explicar corretamente.
Patrimônio e uma estancia da entidade Dispositivo !
[code]@Entity
public class Dispositivo {
@Id
@GeneratedValue
private Long id;
private String patrimonio;
private String fabricante;
private String modelo;
..
//Get’s e Set’s
}[/code]
então, se os getters e setters estão de acordo, os checkboxes deveriam ser:
<input type="checkbox" name="dispositivo[${status.index}].patrimonio" value="${dispositivo.patrimonio}">
e o método do controller deveria receber uma List chamada dispositivo.
está exatamente assim no seu código?
Consegui passar a lista para o controler da seguinte maneira no form:
<form action="${pageContext.request.contextPath}/dispositivo/busca" method="post">
<c:forEach items="${dispositivoList}" var="dispositivo" varStatus="status">
<tr>
<td><input type="checkbox" name="dispositivo[${status.index}].id" value="${dispositivo.id}"></td>
<td id="patrimonio">${dispositivo.patrimonio}</td>
</tr>
</c:forEach>
<button type="submit" class="bt_cadastrarDispositivo">Pesquisar</button>
</form>
public void busca(List<Dispositivo> dispositivo) {
List<Dispositivo> teste = dispositivo;
System.out.print(teste);
}