为什么输入(例如h:inputText)嵌套在h:dataTable中不更新Bean模型?
我有jsf页面:
.... ....
并且具有字符串ArrayList的托管bean:
@ManagedBean @ViewScoped public class NewMusician { private ArrayList strings = new ArrayList(); public NewMusician() { strings.add("olo"); } public ArrayList getStrings() { return strings; } public void saveNewMusician() { ..... } .... }
问题:当我更改文本并按下保存按钮时,在saveNewMusician()方法中我可以看到ArrayList“strings”包含相同的旧值“olo”,但不是我在输入字段中插入的那个。 如果使用h:selecOneMenu也会出现同样的问题。
如果不使用字符串,则改变情境,但是聚合字符串并将值设置为字符串的对象。 所以,如果我将使用一些POJO并将inputText更改为:
一切都变好了。
问题:为什么使用1级getter 是不正确的,但使用2级getter:
是好的?
String
是不可变的。 它没有值的setter。 你需要将它包装在一个bean(或你称之为POJO)中。
public class Musician { private String preferredGenre; // Add/generate constructor, getter, setter, etc. }
然后按如下方式更改托管bean。
@ManagedBean @ViewScoped public class NewMusician { private ArrayList musicians = new ArrayList (); public NewMusician() { musicians.add(new Musician("olo")); } public ArrayList getMusicians() { return musicians; } public void saveNewMusician() { // ... } // ... }
你的数据表: