selectOneMenu不会调用监听器

时间:2016-08-12 17:27:28

标签: jsf primefaces

我有一个p:selectOneMenu,更改值应该运行一个监听器来更新另一个p:selectOneMenu的值(类型:状态 - > city)。除了项目之外还有#34; All"在第一个p:selectOneMenu。当您选择" All"以外的任何项目时听不到,但是当我选择" All"选项。

我也意识到模型不会更新。也就是说,第一个p:selectOneMenu的值未在实体属性

中设置

以下代码:

第一

<p:selectOneMenu id="pesquisaCategoria" style="width:100%;"
                    value="#{inscricaoFaces.entity.categoriaSelecionada}"
                    styleClass="input-block-level" converter="#{categoriaConverter}">               
                    <f:selectItem itemLabel="#{msgs['label.dropdown.todos']}"
                        noSelectionOption="true" itemValue="#{null}" />
                    <f:selectItems value="#{categoriaFaces.listarTodasCategorias()}"
                        var="categoria" itemValue="#{categoria}"
                        itemLabel="#{categoria.descricao}" />
                    <p:ajax update="pesquisaAreaAtuacao" event="change"
                        listener="#{inscricaoFaces.atualizarAreasAtuacao}" />

                </p:selectOneMenu>

第二

<p:selectOneMenu id="pesquisaAreaAtuacao" style="width:100%;"
                    value="#{inscricaoFaces.entity.areaAtuacao}"
                    styleClass="input-block-level" converter="#{areaAtuacaoConverter}">
                    <f:selectItem itemLabel="#{msgs['label.dropdown.todos']}"
                        noSelectionOption="true" itemValue="#{null}" />
                    <f:selectItems value="#{inscricaoFaces.areasAtuacao}" var="area"
                        itemValue="#{area}" itemLabel="#{area.descricao}" />
                </p:selectOneMenu>

转换

@ManagedBean
@RequestScoped
public class CategoriaConverter implements Converter, Serializable {

/**
 * 
 */
private static final long serialVersionUID = -1073909086688882110L;

@EJB
private CategoriaService categoriaService;

@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String value) {

    if (value != null && value.trim().length() > 0 && !"Todos".equals(value)) {
        return categoriaService.consultarPorId(new Categoria(Integer.valueOf(value)));
    } else {
        return null;
    }
}

@Override
public String getAsString(FacesContext fc, UIComponent uic, Object value) {
    if(value != null){
        return value instanceof Categoria ? String.valueOf(((Categoria) value).getCodigo()) : null;         
    }else{
        return null;
    }
}
}

0 个答案:

没有答案