2016-07-19 94 views
0

Guys mein Problem ist, dass ich diesen Fehler bekomme, wenn ich die Seite lade. Ich versuche, einen Konverter für mein selectOneMenu-Feld zu verwenden, es muss einfach sein, aber ich kann die Lösung nicht finden. Es gibt Daten in der Datenbank und kein Fehlerprotokoll.Konverter funktioniert nicht richtig

enter image description here

Converter:

@FacesConverter(forClass = Tag.class)//Tag is the class where I get my Tag. 
public class ConverteGadoTag implements Converter { 

@Inject 
private TagsRep tagsRep; //this is my repository 

@Override //this is BalusC code. 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     if (value == null || value.isEmpty()) { 
      return null; 
     } 

     if (!value.matches("\\d+")) { 
      throw new ConverterException("The value is not a valid ID number: " + value); 
     } 



     Long id = new Long(value); 
     return tagsRep.porId(id); 
     // You may want to perform an additional check if it didn't return null 
     // and otherwise throw ConverterException with "unknown Product ID". 
    } 

    @Override  
    public String getAsString(FacesContext context, UIComponent component, Object value) {   
     if (value == null) { 
      return null; // Or an empty string, can also. 
     } 

     if (!(value instanceof Tag)) { 
      throw new ConverterException("The value is not a valid Product: " + value); 
     } 

     Long id = ((Tag)value).getTagId(); 
     return (id != null) ? String.valueOf(id) : null; 
    } 

} 

Meine xhtml Seite:

<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml" 
xmlns="http://www.w3.org/1999/xhtml" 
xmlns:h ="http://java.sun.com/jsf/html" 
xmlns:f ="http://java.sun.com/jsf/core" 
xmlns:ui ="http://java.sun.com/jsf/facelets" 
xmlns:p ="http://primefaces.org/ui" 
xmlns:o="http://omnifaces.org/ui"> 

<ui:define name="titulo">Novo Gado</ui:define> 

<ui:define name="corpo"> 
<f:metadata> 
    <o:viewParam name="gado" value="#{cadastroGadoBean.gado}" converter="# {converteGadoTag}"/> 
    <f:event listener="#{cadastroGadoBean.inicializar}" type="preRenderView"/> 
</f:metadata> 


<h:form> 
    <h1>Novo Gado</h1> 

    <p:messages autoUpdate="true" closable="true"/> 

    <p:toolbar style="margin-top: 20px"> 
     <p:toolbarGroup> 
      <p:button value="Novo" outcome="/gado/CadastroGado"/> 
      <p:commandButton value="Salvar" id="botaoSalvar" action="#{cadastroGadoBean.salvar}" update="@form"/> 
     </p:toolbarGroup> 

    </p:toolbar> 

    <p:panelGrid columns="2" id="painel" style="width: 100%; margin-top: 20px" 
    columnClasses="rotulo, campo"> 

     <p:outputLabel value="Tipo" for="gadoTipo"/> 
     <p:inputText id="gadoTipo" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.gadoTipo}"/> 

     <p:outputLabel value="Peso" for="gadoPeso"/> 
     <p:inputText id="gadoPeso" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.gadoPeso}"/> 

     <p:outputLabel value="Sexo" for="sexo"/> 
     <p:inputText id="sexo" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.sexo}"/> 

     <p:outputLabel value="Nascimento" for="gadoNasc"/> 
     <p:calendar id="gadoNasc" size="10" pattern="dd/MM/yyyy" 
     value="#{cadastroGadoBean.gado.gadoNasc}" /> 

     <p:outputLabel value="Raça" for="gadoRaca"/> 
     <p:inputText id="gadoRaca" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.gadoRaca}"/> 

     <p:outputLabel value="Finalidade do Gado" for="gadoFinalidade"/> 
     <p:inputText id="gadoFinalidade" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.gadoFinalidade}"/> 


     <p:outputLabel value="Status" for="gadoStatus"/> 
     <p:inputText id="gadoStatus" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.gadoStatus}"/> 

     <p:outputLabel value="Ultima Latitude" for="ultimaLat"/> 
     <p:inputText id="ultimaLat" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.ultimaLat}"/> 

     <p:outputLabel value="Ultima Longitude" for="ultimaLong"/> 
     <p:inputText id="ultimaLong" size="60" maxlength="80" 
     value="#{cadastroGadoBean.gado.ultimaLong}"/> 

     <p:outputLabel value="Tag"/> 
      <p:selectOneMenu title="Selecione a tag" value="#{cadastroGadoBean.tag}"> 
       <f:selectItems value="#{cadastroGadoBean.listTags}" var="tag" 
       itemValue="#{tag}" itemLabel="#{tag.descricao}"/> 
      </p:selectOneMenu> 
     </p:panelGrid> 
    </h:form> 
    </ui:define> 
</ui:composition> 
+0

* Dann habe ich den Code von BalusC benutzt und es hat funktioniert * Benutze also den Code von Balus. –

+0

Entschuldigung. B4 Ich benutze seinen Code dort war ein anderer Fehler. Jetzt verstehe ich das. –

Antwort

0

Versuchen Sie den Code wie folgt zu ändern ...

Java Converter:

@FacesConverter("tagConverter") 
public class ConverteGadoTag implements Converter { 

XHTML:

<p:selectOneMenu title="Selecione a tag" value="#{cadastroGadoBean.tag}" converter="tagConverter"> 
       <f:selectItems value="#{cadastroGadoBean.listTags}" var="tag" 
       itemValue="#{tag}" itemLabel="#{tag.descricao}"/> 
      </p:selectOneMenu> 

definieren Sie einfach den Konverter explizit zu verwenden.

Ich hoffe, das hilft!

+0

Ich habe es schon versucht und es wird nicht richtig. Jetzt habe ich eine NullPointerException in dieser Zeile in der Methode getAsString: return ((Tag) -Wert) .getTagId(). ToString(); –

+0

Wurde 'tagId' nicht gesetzt? Versuche zu debuggen. Wie sieht die Klasse "Tag" aus? – chaeschuechli

+0

Ich löste diese Fehlermeldung von Anfang an, jetzt speichert es alle Felder in der DB mit Ausnahme der TagId. Kein Fehlerprotokoll Meine Klasse Tag hat sein atributes und die ID ist so (IDK, wenn ich Code hier in den Kommentaren posten kann, wenn nicht tellme) \t '@Id \t @GeneratedValue (strategy = GenerationType.SEQUENCE, Generator =" tag_sequence ") \t @Column (name = "tag_id") \t public Lange getTagId() { \t \t Rückkehr TagId; \t} ' Die Klasse Gado: ' private Tag-Tag; ... @ManyToOne \t @JoinColumn (name = "tag_id") \t öffentlich Tag getTag() { \t \t return-Tag; \t} ' –