Bom dia galera, tudo certo ?? Bem, na minha aplicação estou querendo fazer o seguinte: tenho uma lista dois selectOneMenu (escola e turma). Daí que busco as turmas somente daquela escola.
No selectOneMenu de turmas, coloquei um <f:selectItem como default e depois um <f:selectItems com a lista das turmas daquela escola. Porém, eu queria fazer o seguinte: se a escola só tiver uma turma, queria que o <f:selectItem “desaparecesse” e viesse direto a ÚNICA TURMA. Queria fazer pelo tamanho da lista de turmas, no caso se ela fosse igual a 1… Até agora consegui somente desabilitar o <f:selectItem… Tentei utilizar o rendered, mas não está funcioando…Abaixo os dois selectOneMenu:
<tdalign="right">Escola:*</td><h:panelGridcolumns="2"><p:selectOneMenuid="escola"value="#{registroAulaJsfBean.crudObj.escola}"converter="sec"required="true"requiredMessage="O campo escola deve ser informado."filter="true"caseSensitive="false"filterMatchMode="contains"><f:selectItemitemLabel="Selecione"itemValue="#{null}"/><f:selectItemsvalue="#{registroAulaJsfBean.escolaList}"var="e"itemLabel="#{e.codigo} - #{e.nome}"itemValue="#{e}"/><f:ajaxrender="turma"event="change"listener="#{registroAulaJsfBean.atualizarTurmaPorEscola(event)}"/></p:selectOneMenu></h:panelGrid><tdalign="right">Turma:*</td><h:panelGridcolumns="2"><p:selectOneMenuid="turma"value="#{registroAulaJsfBean.crudObj.turma}"converter="sec"required="true"requiredMessage="O campo turma deve ser informado."filter="true"caseSensitive="false"filterMatchMode="contains"><f:selectItemitemLabel="Selecione"itemValue="#{null}"itemDisabled="#{registroAulaJsfBean.turmaList.size() == 1}"/><f:selectItemsvalue="#{registroAulaJsfBean.turmaList}"var="t"itemLabel="#{t.codigo} - #{t.descricao}"itemValue="#{t}"/><p:ajaxupdate="disciplinas periodo presenca_table"event="change"listener="#{registroAulaJsfBean.atualizarEtapa(event)}"/></p:selectOneMenu></h:panelGrid>
1 - Crie o campo com a única turma, e o select com várias.
2 - Faça o método que diz se existe uma única turma
3 - Se tiver uma única turma, o campo único deve ser renderizado, e o select não. Se houverem várias turmas, deve ocorrer o inverso.
R
Ricardo_Favero_Junio
Rodrigo Sasaki:
O jeito mais fácil é o seguinte:
1 - Crie o campo com a única turma, e o select com várias.
2 - Faça o método que diz se existe uma única turma
3 - Se tiver uma única turma, o campo único deve ser renderizado, e o select não. Se houverem várias turmas, deve ocorrer o inverso.
Olá Rodrigo Sasaki, blz? Bem, desculpe, mas não entendi mto bem… Mas desse jeito que estou fazendo, não tem como fazer com que o selectItem “suma” ?? Tentei criar um booleano no meu bean, e testar, mas não tem jeito de funcionar o rendered…Poderia dar uma ajuda aí ?? Vlw…
R
Rodrigo_Sasaki
mas o rendered faz justamente isso. Coloque fixamente um rendered=“false” no seu componente e carregue a página de novo, veja que ele não vai aparecer
R
Ricardo_Favero_Junio
Coloquei o rendered dessa maneira e não funciou…
R
Ricardo_Favero_Junio
Alguém mais poderia dar uma ajuda aí? Estou tentando também utilizar o c:if , mas n está dando certo…abaixo o xhtml:
<tdalign="right">Turma:*</td><h:panelGridcolumns="2"><p:selectOneMenuid="turma"value="#{registroAulaJsfBean.crudObj.turma}"converter="sec"required="true"requiredMessage="O campo turma deve ser informado."filter="true"caseSensitive="false"filterMatchMode="contains"><c:iftest="#{registroAulaJsfBean.turmaList.size() == 1}"><f:selectItemitemLabel="Selecione"itemValue="#{null}"/></c:if><f:selectItemsvalue="#{registroAulaJsfBean.turmaList}"var="t"itemLabel="#{t.codigo} - #{t.descricao}"itemValue="#{t}"/><p:ajaxupdate="disciplinas periodo presenca_table"event="change"listener="#{registroAulaJsfBean.atualizarEtapa(event)}"/></p:selectOneMenu></h:panelGrid>
Se alguém puder ajudar, agradeço mto… Vlw
G
gustavo_souza
Olá Ricardo,
O que você pode tentar fazer é na hora que você buscar turmaList, você criar uma regra uma regra no método do seu bean da seguinte forma:
Porque você setando o atributo “value” do selectOneMenu com alguma valor, esse valor aparece como selecionado de cara quando a combo é renderizada, sem precisar usar o render para esconder a combo inteira ou só o selectItem.
Tenta lá e avisa para nós.
Um abraço
R
Rodrigo_Sasaki
o rendered não é no f:selectItem, e sim no p:selectOneMenu
R
Ricardo_Favero_Junio
mas então como eu poderia fazer para que, quando tiver somente uma turma na lista, ela vir direto no selectOneMenu, e não ter que selecionar…??
G
gustavo_souza
Então, mas nesse caso você não vai ter como selecionar mais mesmo, pois a lista só tem um item , mas desse jeito,mesmo assim, vai ter a outra opção “Selecione”, só que agora na renderização já vai vir selecionada a turma que você setou (this.turmaList.get(0).
Posta aqui o método que popula (preenche) a “turmaLista” e coloca essas linhas de código dentro desse metodo e vê o que acontece:
Então, mas nesse caso você não vai ter como selecionar mais mesmo, pois a lista só tem um item , mas desse jeito,mesmo assim, vai ter a outra opção "Selecione", só que agora na renderização já vai vir selecionada a turma que você setou (this.turmaList.get(0).
Posta aqui o método que popula (preenche) a "turmaLista" e coloca essas linhas de código dentro desse metodo e vê o que acontece:
<tdalign="right">Escola:*</td><h:panelGridcolumns="2"><p:selectOneMenuid="escola"value="#{registroAulaJsfBean.crudObj.escola}"converter="sec"required="true"requiredMessage="O campo escola deve ser informado."filter="true"caseSensitive="false"filterMatchMode="contains"><f:selectItemitemLabel="Selecione"itemValue="#{null}"/><f:selectItemsvalue="#{registroAulaJsfBean.escolaList}"var="e"itemLabel="#{e.codigo} - #{e.nome}"itemValue="#{e}"/><f:ajaxrender="turma"event="change"listener="#{registroAulaJsfBean.atualizarTurmaPorEscola(event)}"/></p:selectOneMenu></h:panelGrid><tdalign="right">Turma:*</td><h:panelGridcolumns="2"><p:selectOneMenuid="turma"value="#{registroAulaJsfBean.crudObj.turma}"converter="sec"required="true"requiredMessage="O campo turma deve ser informado."filter="true"caseSensitive="false"filterMatchMode="contains"><f:selectItemitemLabel="Selecione"itemValue="#{null}"/><f:selectItemsvalue="#{registroAulaJsfBean.turmaList}"var="t"itemLabel="#{t.codigo} - #{t.descricao}"itemValue="#{t}"/><p:ajaxupdate="disciplinas periodo presenca_table"event="change"listener="#{registroAulaJsfBean.atualizarEtapa(event)}"/></p:selectOneMenu></h:panelGrid>
Bom dia galera, tudo certo ? Bem, ainda não consegui resolver o problema do rendered no selectItem… Não tem jeito de funcionar…Alguém saberia de alguma coisa que eu poderia fazer?? Vlw