Ricevo l’errore javax.el.PropertyNotFoundException: /member/apps/cms/edit.xhtml @228,49 value="#{props.key}": Property 'key' not found on type java.util.HashMap$Values
quando si tenta di visualizzare il datatable di seguito.
<p:dataTable id="properties" var="props" value="#{contentEditorBacking.properties}" editable="true">
<p:column headerText="Property">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{props.key}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{props.key}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Value">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{props.value}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{props.value}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Edit">
<p:rowEditor />
<!-- Need to put an update on here yet -->
<p:commandLink styleClass="ui-icon ui-icon-trash" id="deleteProperty" actionListener="#{contentEditorBacking.deleteProperty}">
<f:attribute name="key" value="#{props.key}" />
</p:commandLink>
</p:column>
</p:dataTable>
Qui è la parte più importante della mia contentEditorBacking:
@ManagedBean
@ViewScoped
public class ContentEditorBacking {
private Map<String, Properties> properties = new LinkedHashMap<String, Properties>();
public Collection<Properties> getProperties() throws Exception{
return properties.values();
}
public static class Properties{
private String key;
private String value;
public Properties(String key, String value) {
super();
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "key=" + key + ", value=" + value + "";
}
}
}
Come posso accedere al valore della chiave di mia proprietà sulla mappa?
post di una parte più grande del tuo file XHTML.
Spiacente, la datatable tag ha tagliato fuori. C’è ora.
Spiacente, la datatable tag ha tagliato fuori. C’è ora.
Fino alla prossima JSF 2.2, il
<h:dataTable>
/<p:dataTable>
non supportaCollection<E>
. Non solo sostiene, tra l’altroList<E>
.È necessario sostituire
da
e da qualche parte direttamente dopo la mappa di inizializzazione di fare questo
(nota: non fare all’interno del getter!)
OriginaleL’autore BalusC
Nel codice JSF, si sta tentando di accedere alla chiave di proprietà della cosa restituito da getProperties() il metodo, che è l’intera collezione. È necessario scorrere i puntelli variabile.
OriginaleL’autore Nicolae Albu
DataTable deve ricevere un insieme (ad esempio, un Elenco). La mappa non implementano l’interfaccia per la Raccolta. Si dovrebbe convertire la vostra mappa in un elenco e modificare, quindi convertire l’elenco in mappa. Ecco un buon link che mostra come fare:
Naturalmente, non mi consiglia di aggiungere la logica del getter/setter, invece di utilizzare 2 diversi attributi e mantenere i metodi getter e setter il più pulito possibile.
OriginaleL’autore Luiggi Mendoza
Vostra proprietà classe deve implementare l’interfaccia della mappa qui: http://docs.oracle.com/javase/6/docs/api/java/util/Map.html
La domanda migliore è, però, perché la creazione di una propria classe? Java offre una Proprietà di classe nell’SDK: http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html
EDIT: Aggiornare la mia risposta per ogni richiesta di OP
Modificare la seguente riga, quindi correggere gli errori di compilazione in Eclipse:
:
EDIT #2: in Realtà la mia risposta è probabilmente sbagliato. L’OP non postare tutta la sua xhtml file, e ho fatto un presupposto che non è corretto.
Si può, si prega di fornire il codice su come implementare l’interfaccia della Mappa? Non l’ho scritto questo codice, sto solo cercando di aggiornare la pagina, ed è molto più avanzato rispetto alle mie competenze, quindi sto cercando di imparare come vado.
OriginaleL’autore Jonathan S. Fisher