pelikan:
Cara, eu tentaria usar o ajax.
Faça algo do tipo
public void listarServicosByPrograma(ActionEvent event) {
servicoSelecionado = null;
FacesContext.getCurrentInstance().renderResponse();
}
altere o tipo dos objetos
HtmlSelectOneMenu programaSelecionado
HtmlSelectOneMenu servicoSelecionado;
para o próprio objeto, parece que no seu caso ficaria
ProgramaHandler programaSelecionado;
ServicoHandler servicoSelecionado;
aí seu jsp ficaria algo desse tipo
<h:outputText value="Programa: " />
<h:selectOneMenu id="programa" value="#{unidadeHandler.programaSelecionado}">
<f:selectItems value="#{unidadeHandler.programaParaComboBox}" />
<a4j:support event="onchange"
reRender="servico"
actionListener="#{unidadeHandler.listarServicosByPrograma}"
id="itemsDePrograma"/>
</h:selectOneMenu>
<h:outputText value="Serviço: " />
<h:selectOneMenu id="servico" value="#{unidadeHandler.servicoSelecionado}" >
<f:selectItems value="#{unidadeHandler.servicoParaComboBox}" />
</h:selectOneMenu>
Espero que isso te ajude.
Valeu meu amigo, fiz conforme vc sugeriu, mas me apareceu um erro no console do eclipse dizendo assim:
04/01/2010 10:32:52 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=Unidade:j_id_jsp_968518448_1pc8:unidade:j_id_jsp_1853232834_1pc9:servico[severity=(ERROR 2), summary=(Conversion Error setting value '3' for 'null Converter'. ), detail=(Conversion Error setting value '3' for 'null Converter'. )]
sourceId=Unidade:j_id_jsp_968518448_1pc8:unidade:j_id_jsp_1853232834_1pc9:programa[severity=(ERROR 2), summary=(Conversion Error setting value '1' for 'null Converter'. ), detail=(Conversion Error setting value '1' for 'null Converter'. )]
Eu criei uma classe converter e mapeei no faces-config, mesmo assim ele dá esse erro... olha só minha converter:
public class LongConverter implements Converter {
public Object getAsObject(FacesContext arg0, UIComponent arg1, String valor)
throws ConverterException {
Long resultado = null;
try {
resultado = new Long(Long.parseLong(valor));
} catch (NumberFormatException nfe) {
throw new ConverterException(valor + " não é um número válido!",
nfe);
}
return resultado;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object obj)
throws ConverterException {
String resultado = "";
if (obj != null) {
resultado = obj.toString();
return resultado;
}
if (obj instanceof Programa) {
Programa aux = (Programa) obj;
return aux.getCod_programa().toString();
} else if (obj instanceof String
&& ((String) obj).equalsIgnoreCase("-1")) {
return "-1";
} else
throw new ConverterException("(" + obj.getClass()
+ ") não é uma instância.");
}
}
O que pode ser esse erro??
Deixa eu te falar: o banco é em postgresql, o existe uma tabela de programa, e uma de servico que é vinculada a tabela do programa, ou seja, cada servico é relacionado a um programa.
Valeu pela ajuda man!!!