jsf呈现的条件不适用于selectOneMenu

时间:2013-05-01 02:50:09

标签: java jsf-2 primefaces

您好我已经阅读了大量类似问题,但答案对我没有用。

我有这个

<p:selectOneMenu id="tipoTaxon" value="#{taxonDM.taxon.tipoTaxon}"
                        name="tipoTaxon">
                        <f:converter converterId="tipoTaxonConverter" />
                        <f:selectItem itemLabel="Seleccione uno" itemValue="0" />
                        <f:selectItems value="#{tipoTaxonDM.tiposTaxones}" var="txn"
                            itemValue="#{txn.idTipoTaxon}" itemLabel="#{txn.nombreTipo}" />
                        <p:ajax  render="test" />
                    </p:selectOneMenu>
                    <p:inputText id="test" rendered="#{taxonDM.taxon.tipoTaxon != null}" />

如您所见,我想在选择选项时进行测试。 tipoTaxon基本上是我的数据库上的一个表,是类,所以我不得不做一个转换器。它现在似乎工作,我没有得到我以前的错误。现在我没有得到任何错误,但“测试”没有得到渲染。

我尝试了以下

#{taxonDM.taxon.tipoTaxon != null}

#{taxonDM.taxon.tipoTaxon.idTipoTaxon != null}"

我尝试在其他面板上设置测试

<h:panelGrid columns="2" id="formTaxon">
                    <h:outputLabel value="Nombre Científico Taxón" for="taxonInput" />
                    <p:inputText value="#{taxonDM.taxon.nombreCientificoTaxon}"
                        id="taxonInput" />
                    <h:outputLabel value="Nombre Común" for="nombreComunInput" />
                    <p:inputText value="#{taxonDM.taxon.nombreComunTaxon}"
                        id="nombreComunInput" />
                    <h:outputLabel value="Tipo" for="tipoTaxon" />
                    <p:selectOneMenu id="tipoTaxon" value="#{taxonDM.taxon.tipoTaxon}"
                        name="tipoTaxon">
                        <f:converter converterId="tipoTaxonConverter" />
                        <f:selectItem itemLabel="Seleccione uno" itemValue="0" />
                        <f:selectItems value="#{tipoTaxonDM.tiposTaxones}" var="txn"
                            itemValue="#{txn.idTipoTaxon}" itemLabel="#{txn.nombreTipo}" />
                        <p:ajax  render="formTaxon2" />

                    </p:selectOneMenu>
                </h:panelGrid>
                <h:panelGrid columns="2" id="formTaxon2">
                    <p:inputText id="test" rendered="#{taxonDM.taxon.tipoTaxon != null}" />
                </h:panelGrid>

使用render =“test”或render =“formTaxon2”

我向p:ajax添加了一个监听器方法,它起作用,所以我知道它被调用了。

    public void tipoTaxonesXX(AjaxBehaviorEvent e){
            System.out.println("Working");
    }

它确实在我的控制台上打印了“Working”。 我的表单也没有保存,所以我猜它在从tipotaxon或数字转换时遇到了麻烦,但它变为空,我稍后会修复它。

如果有人需要

,这是转换器
import ec.edu.puce.biologia.model.TipoTaxon;

@FacesConverter("tipoTaxonConverter")
public class TipoTaxonConverter implements Converter {

    private TipoTaxonDao tipoTaxonDao;

    @Override
    public Object getAsObject(final FacesContext arg0, final UIComponent arg1,
            final String value) {
        if (value == null || !value.matches("\\d+")) {
            return null;
        }
        try {
            TipoTaxon tipoTaxon = tipoTaxonDao.recuperar(Long.valueOf(value));
            System.out.println("Getting the operation value = "
                    + tipoTaxon.getNombreTipo());
            return tipoTaxon;
        } catch (NumberFormatException e) {
            return null;
            // throw new ConverterException(new
            // FacesMessage("Unknown operation ID: " + value));
        } /*
         * catch (EntidadNoEncontradaException e) { throw new
         * ConverterException(new FacesMessage("Unknown operation ID: " +
         * value)); }
         */
    }

    @Override
    public String getAsString(final FacesContext arg0, final UIComponent arg1,
            final Object value) {
        if (!(value instanceof TipoTaxon)
                || ((TipoTaxon) value).getIdTipoTaxon() == null) {
            return null;
        }

        return String.valueOf(((TipoTaxon) value).getIdTipoTaxon());
    }
}

我需要提出一些例外

更新答案 我的代码有很多错误,我改了很多,但主要的问题是转换器上的EJB没有用。我最终使用了ManagedBean。更多相关内容http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#ProcessingGETRequestParameters

1 个答案:

答案 0 :(得分:1)

正如我在previous answer to your question中所说的那样,<p:selectOneMany>值必须指向您的用户类,TipoTaxon<f:selectItem> / { {1}} itemValue还必须指向同一个用户类<f:selectItems>

如您所见,TipoTaxonitemValue="0"都不满足上述说法。纠正它并看它工作。


我对未来发布的建议是发布完整的,相关的和必须格式化的代码,在您的情况下包括转换器代码,模型类和托管bean部分。另外,不要将相同的问题发布两次/三次等,而是尝试在您自己的上解决,否则它将被重复关闭。