olá galera!!!
finalmente consegui resolver meu problema com o doubleselect…
oq estava acontecendo era que nesta versão do struts o javascript gerado pela tag não “combina” muito bem com o esquema de conveção… o javascript não funcionava por causa do hifem na action (tipo listar-chamados)…
fiquei triste pois conveção de codigo ajuda e muito na hora do desenvolvimento… ate parece q o framework tem vida propria… kkkk
oq tive que fazer para funcionar foi retirar o hifem do nome da action e utilizar anotações para mapear o resultado…
e td funcionou normalmente…
gostaria de deixar aqui um exemplo de codigo para aqueles q tambem tem duvidas com esta tag.
1º - criaremos um index.jsp apenas para chamar a action (poderiamos tambem digitar no navegador 8) )
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello</h1>
<s:a namespace="/actions" action="testtag">go to Test DoubleSelect tag</s:a>
</body>
</html>
no index.jsp não tem nd de absurdo… e apenas um link…
2º - Criaremos nossa pagina de teste da coisa… primeiro com lista estatica…
[code]
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib prefix=“s” uri="/struts-tags"%>
Insert title here
Test DoubleSelect Tag
<s:doubleselect label="doubleselect"
headerKey="0" headerValue="--Selecione--"
name="name"
list="{'fruit','other'}"
doubleName="dishes"
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
<s:submit value="salvar" action="salvar-test"/>
</s:form>
[/code]
na primeira versão da test-tag.jsp temos 3 tags…
<s:form>, <s:doubleselect> e <s:submit>
detalharemos o doubleselect…
label="doubleselect" >>> nome q sera exibido (label =))
headerKey="0" >>> posição q sera adicionado o headerValue
headerValue="--Selecione--" >>> valor q sera adicionado no default
name="name" >>> onde a tag fara o binding do resultado do combo 1
list="{'fruit','other'}" >>> lista de item do combo 1
doubleName="dishes" >>> onde a tag fara o binding do resultado do combo 2
doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" >>> lista de item do combo 2... com uma pequena logica...
3º - nossa Action…
//imports aqui...
public class TestTagAction extends ActionSupport implements Preparable {
private static final long serialVersionUID = 1L;
private String name;
private String dishes;
private List<String> listNames;
private List<String> listDishes;
// aqui estou fazendo o mapeamento da action "testtag" com o result "success" para o jsp "test-tag.jsp"
@Action(value = "testtag",
results = { @Result(name = "success", location = "/test-tag.jsp") })
public String testTag() {
//aqui poderia realizar alguma coisa... sei lah
return SUCCESS;
}
// aqui estou fazendo o mapeamento da action "salvar-test" com o result "success" para o jsp "show-result"
@Action(value = "salvar-test",
results = { @Result(name = "show-result", location = "/show-result.jsp") })
public String salvarTest() {
System.out.println("Name = " + name);
System.out.println("Dishes = " + dishes);
//com isso aqui ele ja saberia q é para ir para o jsp "show-result"... convenção =)
// mais fiz o mapeamento na anotação...
return "show-result";
}
// isso aqui vem da interface Preparable...
// estou utilizando para carregar a lista =)
@Override
public void prepare() throws Exception {
listNames = new ArrayList<String>();
listNames.add("fruit");
listNames.add("other");
}
// isso aqui serve para vc utilizar o combo dinamico...
// estou adicionando na mão, mais poderia realizar uma busca em um bando de dados...
// o parametro top vem do jsp... na verdade e oq o cara escolher no combo 1
public List<String> getDoubleList(String top) {
listDishes = new ArrayList<String>();
if (top.equalsIgnoreCase("fruit")) {
listDishes.clear();
listDishes.add("apple");
listDishes.add("orange");
} else {
listDishes.clear();
listDishes.add("monkey");
listDishes.add("chicken");
}
return listDishes;
}
// getter and setter aqui....
}
4º - agora o test-tag.jsp com um select dinamico…
[code]
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib prefix=“s” uri="/struts-tags"%>
Insert title here
Test Tag
<s:doubleselect label="doubleselect"
headerKey="0" headerValue="--Selecione--" name="name"
list="listNames" doubleName="dishes"
doubleHeaderKey="0" doubleHeaderValue="--Selecione--"
doubleList="getDoubleList(top)" />
<s:submit value="salvar" action="salvar-test"/>
</s:form>
[/code]
oque mudou agora e q o doublelist esta utilizando o resultado do metodo getDoubleList(String top) para carregar a lista…
com isso temos a segunda lista dinamica
para colcoar o combo 1 dinamico basta carregar a listNames de algum lugar tipo bd…
5º - aqui um jsp de resultado bem simples…
[code]
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib prefix=“s” uri="/struts-tags"%>
Insert title here
Results of test
<s:property value="name"/>
<s:property value="dishes"/>
[/code]
isso aqui foi so para mostrar que ele realmente faz o binding certinho =)
bom galera e isso aew… me desculpem pelo livro q fiz…
espero ter ajudado alguem =)
at + abs