Primefaces selectOneMenu-Wandler genannt, aber nicht arbeiten
Habe ich mir angeschaut, die anderen Fragen diese und diese, etc, das problem ist, dass mein konvertieren wird aufgerufen, aber die Werte selectOneMenu nicht ändern. Meine entity-Klasse generiert wird, und hat gleich auch als hashCode, und ich möchte nicht, irgendetwas zu ändern - wenn es sich wieder regeneriert hat, dann sind alle änderungen verloren (Die Arbeit um zu ändern toString-Methode des entity-Klasse).
XHTML-code snipped:
<p:selectOneMenu id="defid"
value="#{abcController.selected.defid}"
converter="defConverter">
Den Konverter:
@FacesConverter("defConverter")
public class DefConverter implements Converter
{
private static final Logger LOG = Logger.getLogger(DefConverter.class.getName());
@EJB
private DefFacade defFacade;
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string)
{
LOG.info("getAsObject: " + string);
try
{
return defFacade.findWithNFieldsWithValue("name", string, "=").get(0);
}
catch (Exception ex)
{
LOG.log(Level.SEVERE, "Error while fetching Def for " + string, ex);
}
return null;
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object obj)
{
LOG.info("getAsString obj class: " + obj.getClass().getName());
if(obj instanceof Def)
{
Def def = (Def)obj;
LOG.info("getAsString def name: " + def.getName());
return def.getName();
}
else
{
StringBuilder sbError = new StringBuilder("The object of class ");
sbError.append(obj.getClass().getName()).append(" is not of Def");
throw new ClassCastException(sbError.toString());
}
}
}
Die entity-Klasse geschnippelt (erzeugt):
...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "defid")
private Long defid;
...
@Override
public int hashCode()
{
int hash = 0;
hash += (defid != null ? defid.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object)
{
//TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Def))
{
return false;
}
Def other = (Def) object;
if ((this.defid == null && other.defid != null) || (this.defid != null && !this.defid.equals(other.defid)))
{
return false;
}
return true;
}
Wenn die Seite lädt, ich kann sehen, dass die log-Anweisungen wie folgt:
getAsString obj class: com.xyz.Def
getAsString def name: Name 1
getAsString obj class: com.xyz.Def
getAsString def name: Name 2
getAsString obj class: com.xyz.Def
getAsString def name: Name 3
Damit der Konverter wird aufgerufen und gibt die richtigen Werte, aber auf der Seite ist es noch com.xyz.Def[ defid=1 ] (Drop-down und normal)
InformationsquelleAutor TungstenX | 2015-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Konverter zu funktionieren scheint, aber Sie nicht posten das ganze
<p:selectOneMenu>
code, insbesondere<f:selectItems>
. Es sollte in etwa so AussehenitemLabel
ist verantwortlich für das drucken von angezeigten Werten.Du bist herzlich willkommen.
InformationsquelleAutor Predrag Maric
Versuchen Sie den folgenden code
Converter dient zur Konvertierung zwischen komplexen Java-Objekt und String-Darstellung. Für diese müssen Sie die ganzen def-Objekt als Element von Wert statt. Sie sollten auch sicherstellen, dass #{abcController.ausgewählt.def} bezieht sich auf eine def Eigenschaft, nicht Lange-Eigenschaft für den def-ID.
InformationsquelleAutor Swathi