--Umgebung
javax.el.PropertyNotWritableException: /admin/ponsuke/ponsuke.xhtml @52,92 value="#{item.mailAddress}": The class 'jp.co.my.app.Item' does not have a writable property 'mailAddress'.
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:99)
at javax.faces.component.UIInput.updateModel(UIInput.java:859)
at javax.faces.component.UIInput.processUpdates(UIInput.java:773)
at com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:571)
Ein ... sein ...
<!--Kürzung-->
<ui:repeat var="category" varStatus="index" value="#{ponsukeController.categories}">
<ui:repeat var="item" varStatus="status" value="#{category.itemList}">
<td class="form-inline">
<h:inputText value="#{item.mailAddress}" />
<!--Kürzung-->
Kein Setter?
PonsukeController
//Kürzung
/**Kategorie Informationsliste. */
@Getter
@Setter
private List<Category> categories;
//Kürzung
Ahhhh, "@ Value" enthielt nicht "@ Setter" ...
In practice,
@Value
is shorthand for: final@ToString
@EqualsAndHashCode
@AllArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
@Getter
, except that explicitly including an implementation of any of the relevant methods simply means that part won't be generated and no warning will be emitted. @Value - projectlombok.org
Category
import lombok.Value;
@Value
public class Category {
List<Item> itemList;
}
Item
import lombok.Value;
@Value
public class Item {
int itemId;
String mailAddress;
}
Dieses Mal ist "@ Value" angehängt, und ich verwende die Rolle von "@ AllArgsConstructor" an anderer Stelle
[@Getter
@AllArgsConstructor
] + [@Setter
] = [@Data
@AllArgsConstructor
]
Ich beschloss zu wechseln.
Da die Eigenschaft von class Category
List ist und nur der Inhalt geändert wird, wird die Anmerkung nicht geändert.
Item
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Item {
//Kürzung
Apropos Das individuelle Hinzufügen von "@ Setter" zu den Eigenschaften "itemList" und "mailAddress" führt zu einem Kompilierungsfehler. PropertyNotWritableException trat auch dann auf, wenn "@ Setter" zusätzlich zu "@ Value" zur Klasse hinzugefügt wurde. Ich denke, das liegt wahrscheinlich daran, dass es "@FieldDefaults (makeFinal = true, level = AccessLevel.PRIVATE)" gibt.
To add final to each (instance) field, use
@FieldDefaults(makeFinal=true)
. Any non-final field which must remain nonfinal can be annotated with@NonFinal
(also in the lombok.experimental package). @FieldDefaults - projectlombok.org
Recommended Posts