Tenho a seguinte página:
<script type="text/javascript">
function comportamentoComboDePOS() {
$("#listaDePOS").select2({
width: 'resolve',
multiple: true,
data: [],
initSelection: function (campo, callback) {
var valores = [];
$(campo.val().split(",")).each(function () {
valores.push({id: this, text: this});
});
callback(valores);
}
});
}
function defineMascaras() {
$("#campoPOS").mask("********");
}
function comportamentoDoBotaoIncluirPOS() {
$("#botaoIncluirPOS").click(function() {
valor = $("#campoPOS").val();
if (valor.length < 8) {
alert("Número de POS deve ter 8 posições.");
return false;
}
if ($("#listaDePOS").val() !== "") {
valor = $("#listaDePOS").val() + "," + valor;
}
$("#campoPOS").val("");
$("#listaDePOS").val(valor).trigger("change");
});
}
function comportamentoAoSubmeterFormulario() {
$("#botaoSalvar").click(function(e) {
listaDePOS = $("#listaDePOS").val();
if(listaDePOS != ''){
$(listaDePOS.split(",")).each(function() {
$("#formularioCadastro").append("<input type='hidden' name='listaPOS[]' value='"+this+"' />");
});
}
});
}
$().ready(function() {
comportamentoComboDePOS();
defineMascaras();
comportamentoDoBotaoIncluirPOS();
comportamentoAoSubmeterFormulario();
});
</script>
<form id="formularioCadastro" action="${linkTo[EstabelecimentoController].salvaEstabelecimento}" method="post">
<div class="sixteen columns clearfix">
<div class="nine columns">
<label for="nome">Nome do estabelecimento:</label>
<input type="text" id="nome" name="estabelecimento.nome" value="${estabelecimento.nome }" />
</div>
</div>
<div class="sixteen columns clearfix">
<div class="three columns">
<label for="campoProduto">Número de POS:</label>
<input type="text" id="campoPOS" name="campoPOS" value="" />
</div>
<div class="two columns">
<br /><input type="button" id="botaoIncluirPOS" name="botaoIncluirPOS" value="Incluir POS" />
</div>
<div class="seven columns">
<br /><input type="hidden" id="listaDePOS" value="${fn:join(estabelecimento.arrayPOSCadastrados, ',') }" />
</div>
</div>
<div class="sixteen columns clearfix">
<div class="two columns offset-by-eight">
<br /><input type="submit" id="botaoSalvar" name="botaoSalvar" value="Salvar" />
</div>
<div class="two columns">
<br /><a href="javascript:window.history.go(-1)" class="button full-width">Cancelar</a>
</div>
</div>
</form>
EstabelecimentoController
...
public void salvaEstabelecimento(Estabelecimento estabelecimento, HttpServletRequest httpRequest) {
String lista[] = httpRequest.getParameterValues("listaPOS[]");
Set<String> listaPOS = new HashSet<String>();
if(lista != null) {
for (int i = 0; i < lista.length; i++) {
listaPOS.add(lista[i]);
}
estabelecimento.adicionaPOS(listaPOS);
}
...
}
...
Estabelecimento
private String nome;
private Set<String> POSCadastrados;
private Estabelecimento() {
this(null);
}
public Estabelecimento(String nome) {
this.nome = nome;
this.POSCadastrados = new TreeSet<String>();
}
public Set<String> getPOSCadastrados() {
return Collections.unmodifiableSet(POSCadastrados);
}
public String[] getArrayPOSCadastrados() {
return POSCadastrados.toArray(new String[] {});
}
public void adicionaPOS(Set<String> listaPOS) {
for (String POS : listaPOS) {
adicionaPOS(POS);
}
}
public boolean adicionaPOS(String POS) {
if (POS != null && POS.trim().matches("[a-zA-Z0-9]{8}")) {
return POSCadastrados.add(POS);
}
return false;
}
Quando estou cadastrando um novo produto e chego na linha
String lista[] = httpRequest.getParameterValues(“listaPOS[]”);
ele me mostra a lista que eu já cadastrei.
Porém se eu estou alterando um produto já existente, no campo da página ele me mostra os POS cadastrados, mas ao submeter o formulário a lista está vazia. Já exibi o código-fonte da página e o hidden fica preenchido normalmente. É como que está preenchido mas ele não está reconhecendo que tem valor nele.
Isso acontece somente ao alterar um produto já existente.
Como resolver isso?