您好我已经阅读了大量类似问题,但答案对我没有用。
我有这个
<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
答案 0 :(得分:1)
正如我在previous answer to your question中所说的那样,<p:selectOneMany>
值必须指向您的用户类,TipoTaxon
,和每<f:selectItem>
/ { {1}} itemValue还必须指向同一个用户类<f:selectItems>
。
如您所见,TipoTaxon
和itemValue="0"
都不满足上述说法。纠正它并看它工作。
我对未来发布的建议是发布完整的,相关的和必须格式化的代码,在您的情况下包括转换器代码,模型类和托管bean部分。另外,不要将相同的问题发布两次/三次等,而是尝试在您自己的上解决,否则它将被重复关闭。