Não consigo obter arrays de vários níveis no Struts

Bom, já passei por milhares de códigos, e estou apanhando feio com meu chefe no meu cangote… a página monta certinho, mas na hora de salvar, dá um erro e nem sequer chega na minha action…

O HTML resultante que está certinho:

[code]


Selecione TS_TESTE CD_UF DT_POR_BOOL
IGUAL DIFERENTE
<input type="text" name="bloco[0].itemPremissa[0].valor" value="MG">

IGUAL DIFERENTE
<input type="text" name="bloco[0].itemPremissa[1].valor" value="SP">

IGUAL DIFERENTE
<input type="text" name="bloco[0].itemPremissa[2].valor" value="RJ">

Selecione TS_TESTE CD_UF DT_POR_BOOL
MAIOR MENOR MAIOR OU IGUAL MENOR OU IGUAL IGUAL DIFERENTE
<input type="text" name="bloco[1].itemPremissa[3].valor" value="10">

<select name="bloco[1].itemPremissa[4].operador">
	<option value="&gt;">MAIOR</option>
	<option value="&lt;" selected="selected">MENOR</option>
	<option value="&gt;=">MAIOR OU IGUAL</option>
	<option value="&lt;=">MENOR OU IGUAL</option>
	<option value="==">IGUAL</option>
	<option value="!=">DIFERENTE</option>
</select>
				
<input type="text" name="bloco[1].itemPremissa[4].valor" value="50">

Selecione DTS_PTY T2_ACESS_Z8 TS_TESTE HU_PRO CD_UF DT_POR_BOOL
MAIOR MENOR MAIOR OU IGUAL MENOR OU IGUAL IGUAL DIFERENTE
<input type="text" name="bloco[2].itemPremissa[5].valor" value="100000,00">

Selecione DTS_PTY T2_ACESS_Z8 TS_TESTE HU_PRO CD_UF DT_POR_BOOL
IGUAL DIFERENTE
<select name="bloco[3].itemPremissa[6].valor">
	<option value="S">Selecione</option>
	<option value="1" selected="selected">VERDADEIRO</option>
	<option value="0">FALSO</option>
</select>

<hr>
<input type="submit" value="SALVA"></form>[/code]

as configurações do Struts-Config

[code]

<action name=“premissaForm” path="/premissa" scope=“request” —tentei mudar para session mas nada
type=“regras.PremissaAction” validate=“false”>

[/code]

PremissaForm

[code]import org.apache.struts.action.ActionForm;

public class PremissaForm extends ActionForm {
private static final long serialVersionUID = 1L;

private BlocoBean[] bloco = new BlocoBean[100];

// private Collection bloco = new ArrayList(); – comecei tentando isso mas nada

public BlocoBean[] getBloco() {
	return bloco;
}

public void setBloco(BlocoBean[] bloco) {
	this.bloco = bloco;
}[/code]

BlocoBean

[code]public class BlocoBean {
private ItemPremissa[] itemPremissa = new ItemPremissa[100];
private String codigoDominio;

public ItemPremissa[] getItemPremissa() {
	return itemPremissa;
}
public void setItemPremissa(ItemPremissa[] itemPremissa) {
	this.itemPremissa = itemPremissa;
}
public String getCodigoDominio() {
	return codigoDominio;
}
public void setCodigoDominio(String codigoDominio) {
	this.codigoDominio = codigoDominio;
}

}[/code]]

ItemPremissa

[code]public class ItemPremissa {
private String operador;
private String valor;

public String getOperador() {
	return operador;
}
public void setOperador(String operador) {
	this.operador = operador;
}
public String getValor() {
	return valor;
}
public void setValor(String valor) {
	this.valor = valor;
}

}[/code]

ERRO

[code]type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:805)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.apache.commons.beanutils.NestedNullException: Null property value for 'bloco[0]'
org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:669)
org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:884)
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:805)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)[/code]

HELP???

AHH, mais uma coisa:

Na verdade, na JSP mesmo (e não no HTML pronto e limpo que coloquei aí) as selects de matriz dentro de matriz estão saindo tipo:

resultantes de tags como:
<% String valor = “bloco[”+indiceBlocos+"].itemPremissa["+indicePremissas+"].valor"; %>
<html:select styleId="<%= valor %>" name=“itemPremissa” property=“operador”>

Alguém sabe um jeito de por o “indexed” pra ambas matrizes serem apresentadas no NAME da tag e não no ID??? Ou seja, resultando em:

Eu não tenho certeza, mas o erro deve ser por que o array abaixo esta null em todas as posições.

Então, eu tentei antes inicializar comom List, inicializar como Arraylist, Declarar como Collection e por aí vai… essa matriz foi a última tentativa, mas o erro foi esse.

Eu só quero fazer com que esse HTM resultante tenha seus campos lidos pela minha Action, independente de que formato (vou ter que converter tudo de novo pros Beans do Hibernate mesmo)… mas tá infernal…

Eu tô em casa agora e o código no trabalho, amanhã tento, mas estive pensando em mudar a estrutura. O problema é que esse indices estão amarrados com um monte de javascript de manipulação de DIVs de Ajax e tal…

Pra vc ter uma idéia, embora nesse caso esteja ordenadinho e tal, após os passeios da div (que removem e excluem blocos e premissas, fora que N premissas podem entrar pro mesmo dominio), esses indices ficam distintos , mas decididamente nada sequenciais e com vários valores da sequencia faltando… vai me dar uma trabalheira e se não funcionar meu chefe vai me jogar pela janela…

Bom, ao invés de :

bloco[].codigoDominio (entenda que isso é a chave primária do bloco)
bloco[].itemPremissa[].valor (entenda que não existe na modelagem chave primária pra itemPremissa)
bloco[].itemPremissa[].operador (existe apenas chave estrangeira direta com o codigoDominio)

vou tentar deixar a nomeação indexada automática (indexed=“true”) do struts… vai ficar algo assim:

bloco[#].codigoDominio
itemPremissa[#].valor
itemPremissa[#].operador

e forçar um hidden de itemPremissa que fique com:
itemPremissa[#].codigoDominio

Será que daí o form recebe e passa pra action???