Campo ao alterar produto "invisível"

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?

faltou o name do campo input hidden.

como vc tá usando o VRaptor, vc teoricamente pode receber List listaDePOS no método do controller, e ele vai popular automaticamente.