o colSelecItemAlunosSelecionados eu fiz um List
o colSelectItemAlunos é um List
o problema é que eu selecionando um combo eu quero monstrar na direita os valores ja atribuido, só que quando eu jogo os valores na lista de string ele da erro,
tentei de vez um list de String, passa um lista do objeto que eu manipulo também deu errado.
Alguns dias atrás o leonardobrancalhao mandou uma mensagem privada para mim perguntando sobre esse componente.
Vou postar a resposta que enviei para ele, veja se te ajuda.
<h:form>
<h:commandLink value="Submit" action="#{testeMB.submit}" />
<rich:pickList value="#{testeMB.selectedItems}">
<!-- Aqui você pode adicionar a sua lista de selectItem -->
<f:selectItem itemLabel="Option 1" itemValue="1"/> <!-- no item value, eu recomendo colocar o ID da tabela que você vai utilizar -->
<f:selectItem itemLabel="Option 2" itemValue="2"/>
<f:selectItem itemLabel="Option 3" itemValue="3"/>
<f:selectItem itemLabel="Option 4" itemValue="4"/>
<f:selectItem itemLabel="Option 5" itemValue="5"/>
</rich:pickList>
</h:form>
@ManagedBean @SessionScoped
public class TesteMB {
private Integer[] selectedItems = new Integer[0]; // O rich:pickList retonra para o MB um array de objetos dos valores selecionados.
public String teste() {
//Aqui você pode popular o atributo 'selectedItems' para a tela já carregar com itens selecionados
return "teste";
}
public String submit() {
for(Integer select : selectedItems) {
System.out.println(select); //Aqui você recupera os ID´s dos itens selcionados.
}
return "teste";
}
public Integer[] getSelectedItems() {
return selectedItems;
}
public void setSelectedItems(Integer[] selectedItems) {
this.selectedItems = selectedItems;
}
Alguns dias atrás o leonardobrancalhao mandou uma mensagem privada para mim perguntando sobre esse componente.
Vou postar a resposta que enviei para ele, veja se te ajuda.
<h:form>
<h:commandLink value="Submit" action="#{testeMB.submit}" />
<rich:pickList value="#{testeMB.selectedItems}">
<!-- Aqui você pode adicionar a sua lista de selectItem -->
<f:selectItem itemLabel="Option 1" itemValue="1"/> <!-- no item value, eu recomendo colocar o ID da tabela que você vai utilizar -->
<f:selectItem itemLabel="Option 2" itemValue="2"/>
<f:selectItem itemLabel="Option 3" itemValue="3"/>
<f:selectItem itemLabel="Option 4" itemValue="4"/>
<f:selectItem itemLabel="Option 5" itemValue="5"/>
</rich:pickList>
</h:form>
@ManagedBean @SessionScoped
public class TesteMB {
private Integer[] selectedItems = new Integer[0]; // O rich:pickList retonra para o MB um array de objetos dos valores selecionados.
public String teste() {
//Aqui você pode popular o atributo 'selectedItems' para a tela já carregar com itens selecionados
return "teste";
}
public String submit() {
for(Integer select : selectedItems) {
System.out.println(select); //Aqui você recupera os ID´s dos itens selcionados.
}
return "teste";
}
public Integer[] getSelectedItems() {
return selectedItems;
}
public void setSelectedItems(Integer[] selectedItems) {
this.selectedItems = selectedItems;
}
}
[/code]
Se ainda tiver dúvidas, poste o código do seu MB.
[]'s
Daniel
[/quote]
Eu segui esse modelo tbm so q no lugar do array de Integer eu fiz de String, so que seu eu deixar alguma coisa ja add nesse array ele nao mostra nada, e c eu do um reRender nele, da erro.
que a tela é a seguinte,
eu tenho 1 combo de curso, qndo a pessoa seleciona o curso, ele carrega os alunos do curso e numa List de selectItem, dae eu tenho outra combo que é professor qndo eu seleciono essa compro eu queria mostra do lado direito os alunos que o professor ja possui, so q da erro qndo eu populo o objeto do lado direito
private List colSelecItemAlunosSelecionados;
private List colSelectItemAlunos;
public construtor(){
colSelecItemAlunosSelecionados = new ArrayList<String>();
}
public void salvar(){
for(int i = 0; i < colSelecItemAlunosSelecionados.size(); i++){
Aluno aluno = daoAluno.searchLogin(colSelecItemAlunosSelecionados.get(i));
colAlunosList.add(aluno);
}
}
public void carregarAlunos(){
Date data = new Date();
SimpleDateFormat fmt = new SimpleDateFormat(“yyyy”);
colSelectItemAlunos = new ArrayList();
DAOAluno daoAluno = new DAOAluno();
for(Aluno aluno : daoAluno.searchAlunosSemOrientador(cursoSelecionado, fmt.format(data))){
SelectItem selectItem = new SelectItem(aluno.getId(), aluno.getNome());
colSelectItemAlunos.add(selectItem);
}
}
[/code]
c eu add alguma string na colSelecItemAlunosSelecionados ele da erro…na hora q o componente carrega, pq eu quero adiciona os alunos que o professor ja possui nessa colSelecItemAlunosSelecionados
Mas a sua coleção de SelectItem é composta por ID(Integer) e Nome(String).
A lista de alunos selecionados deve ir buscas os dados através do ID, por isso você deve usar uma lista de Integer.
Além disso, você está usando List<>. Para os itens selecionados você deve usar um array.
Exemplo:
Lista de Alunos Disponíveis (colSelectItemAlunos):
1 - Aluno A
2 - Aluno B
3 - Aluno C
4 - Aluno D
5 - Aluno E
[quote=yorgan]Mas a sua coleção de SelectItem é composta por ID(Integer) e Nome(String).
A lista de alunos selecionados deve ir buscas os dados através do ID, por isso você deve usar uma lista de Integer.
Além disso, você está usando List<>. Para os itens selecionados você deve usar um array.
Exemplo:
Lista de Alunos Disponíveis (colSelectItemAlunos):
1 - Aluno A
2 - Aluno B
3 - Aluno C
4 - Aluno D
5 - Aluno E
Fazendo assim, ele vai carregar a pickList com os alunos 2,4 e 5 selecionados.
[]'s
Daniel
[/quote]
so que usando o array eu não vo ter problema quando o tamanho dele, supondo que quando eu seleciono o combo ja exista 2 adicionados ele vai cria 1 array com espaço de 2 mais qndo o usuario for adiciona mais 1 naum vai da estouro no array?
[quote=yorgan]Não, o RichFaces trata isso.
E não que seja um problema ajudar, mas você poderia ter testado o código antes de postar essa dúvida né?
[]´s
Daniel[/quote]
É que na documentação do richfaces eu vi ele usando String, e dae pensei em usa o List, mais vou fazer do jeito que voce falo de noite, e posto o resultado, desde já te agradeço pela ajuda.
O array tem que ser do mesmo tipo de objeto que você cria o SelectItem.
E no seu construtor você está usando inteiro, certo?
Ele trabalha da seguinte forma:
[list]Popula a lista com os objetos da coleção de SelecItem (que você montou com Value = ID e Label = NOME);[/list]
[list]Verifica se existem itens na lista de campos selecionados;[/list]
[list]Caso existam, percorre a lista de SelectItem para comparar o valor. Nessa hora ele vai comprar com o ID, então você precisa de uma lista de ID´s; [/list]
Basta ver no construtor do SelectItem
new SelectItem(Object value, String label); //O label é o que ele mostra. Se não usar, ele usa o toString(). Já o Object é o que ele compara.