0

嗨,我已经阅读了大量类似的问题,但答案对我不起作用。

我有这个

<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");
    }

它确实在我的控制台上打印了“正在工作”。我的表格也没有保存,所以我想它在从尖分类素或数字转换时遇到了麻烦,但它变成了空值,我稍后会修复它。

如果有人需要,这是转换器

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

4

1 回答 1

1

正如我在之前对您的问题的回答中所说,两个<p:selectOneMany>值都必须指向您的用户类TipoTaxon,,并且每个<f:selectItem>/ <f:selectItems>itemValue 也必须指向同一个用户类,TipoTaxon

如您所见,既不itemValue="0",也不itemValue="txn.nombreTipo"满足上述陈述。纠正它,看看它的工作。


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

于 2013-05-01T07:04:38.197 回答