Problemas com Struts

3 respostas
felipereisbr

Olá pessoal, estou com um problema com o strut,

seguinte,

tenho em meu jsp um submit(um botão em que quando dou submit, ele vai na minha Action.class , faz um calculo e me retorna para minha propria pagina(meu proprio foward), e assim logo depois que faço este 1º submit, já não consigo dar mais nenhum submit, me para que ele "perde meu DynaActionForm, ou algo parecido.)

erro:

javax.servlet.ServletException: BeanUtils.populate
	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:804)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
	java.util.ArrayList.RangeCheck(Unknown Source)
	java.util.ArrayList.get(Unknown Source)
	org.apache.struts.action.DynaActionForm.get(DynaActionForm.java:252)
	org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:386)
	org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:340)
	org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:684)
	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:804)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

jsp:

<tr>
												<td>
													<html:text property="percentualVenda" size="14" maxlength="13" onkeypress="return formataNumero(this, event,'.',',', 2)" styleClass="texto" />
												</td>
												<td>
													<html:text property="valorFinalVenda" size="14" maxlength="13" readonly="true" styleClass="texto_obrigatorio" />
												</td>
												
											</tr>
										</table>
							</fieldset>
						</div>
				</td>
			</tr>
	</table>
	<table border="0" cellspacing="0" cellpadding="0">
				<tr>
					<td>
												<html:submit styleId="botao_menu" property="evento">
													<fmt:message key="label.calcular" />
												</html:submit>
											</td>
										</tr>
										</table>

Action.class

public ActionForward eventoListaDespesas(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		DynaActionForm dynaForm = (DynaActionForm)form;
		String evento = request.getParameter("evento");
		String tipoOperacao = dynaForm.getString("tipoOperacao");
		ArrayList listaVenda = (ArrayList)dynaForm.get("listaDespesasProdutoVenda");
		ArrayList listaAluguel = (ArrayList)dynaForm.get("listaDespesasProdutoLocacao");
		ArrayList listaAux = new ArrayList();
		ArrayList lista = null;
		BigDecimal somaValor = new BigDecimal(0);

		if("Remover".equals(evento)){
			if("V".equals(tipoOperacao))
				lista = listaVenda;
			else if("L".equals(tipoOperacao))
				lista = listaAluguel;
				
			for(int pos = 0; pos < lista.size(); pos++){
				
				DespesasProdutoVO despesasProdutoVO = (DespesasProdutoVO) lista.get(pos);
				String flagInclusao = despesasProdutoVO.getFlagInclusao();
				
				if("S".equals(flagInclusao)){
					listaAux.add(despesasProdutoVO);
					somaValor.add(despesasProdutoVO.getValorDespesa());
				}
			}
			
			if("V".equals(tipoOperacao)){
				dynaForm.set("listaDespesasProdutoVenda", listaAux);
				dynaForm.set("valorUnidadeCustoFinalVenda", GrinaldasGeralUtil.formataBigDecimalParaString(somaValor));
			}
			else if("L".equals(tipoOperacao)){
				dynaForm.set("listaDespesasProdutoLocacao", listaAux);
				dynaForm.set("valorUnidadeCustoFinalLocacao", GrinaldasGeralUtil.formataBigDecimalParaString(somaValor));
			}
			
		}
		else{
			DespesasProdutoVO despesasProdutoVO = new DespesasProdutoVO();
			if("V".equals(tipoOperacao))
				if(listaVenda.size() == 0){
					listaAux.add(despesasProdutoVO);
					dynaForm.set("listaDespesasProdutoVenda", listaAux);
				}else{
					listaVenda.add(despesasProdutoVO);
					dynaForm.set("listaDespesasProdutoVenda", listaVenda.add(despesasProdutoVO));
				}
			else if("L".equals(tipoOperacao))
				if(listaAluguel.isEmpty()){
					listaAux.add(despesasProdutoVO);
					dynaForm.set("listaDespesasProdutoLocacao", despesasProdutoVO);
				}else{
					listaAluguel.add(despesasProdutoVO);
					dynaForm.set("listaDespesasProdutoLocacao", listaAluguel.add(despesasProdutoVO));
				}
		}

		return mapping.findForward("produtoMan");
	}

Desde já agradeço

Att. Felipe Reis

3 Respostas

felipereisbr

completando…

descobri que é toda vez que faço um SUBMIT de uma lista.

ex: lista[0].item

felipereisbr

po ninguém soube não?

att.

felipereisbr

Problema solucionado.

Depois de tantos POTES, verifiquei que quando eu passo no meu Action Mapping o parametro scope="request" , ele não consegue submeter nenhuma lista do form, apenas do request.

Enfim , retirem o scope="request" do Action Mapping caso tenham o mesmo problema reportado acima.

Criado 29 de junho de 2008
Ultima resposta 2 de jul. de 2008
Respostas 3
Participantes 1