This question already has an answer here:
Using <h:dataTable><h:inputText> on a List<String> doesn't update model values
(1个答案)
4年前关闭。
我有jsf页面:
以及具有StringArrayList的托管bean:
问题:当我在其中更改文本并按保存按钮时,在saveNewMusician()方法中,我可以看到ArrayList“字符串”包含相同的旧值“olo”,但是我没有在输入字段中插入那个值。
如果使用h:selecOneMenu,则会出现相同的问题。
如果不使用字符串,而是将字符串聚合并将值设置为字符串的对象,则情况会发生变化。
因此,如果我要使用一些POJO并将inputText更改为:
一切都OK。
题:
为什么使用1级吸气剂
然后按如下所示更改您的托管bean。
和您的数据表:
(1个答案)
4年前关闭。
我有jsf页面:
....
<form jsfc="h:form" action="">
<h:dataTable value="#{newMusician.strings}" var="preferredMusicGenre" id="musicGenresSelectTable">
<h:column>
<h:inputText value="#{preferredMusicGenre}" immediate="true"/>
</h:column>
</h:dataTable>
<p>
<input type="submit" jsfc="h:commandButton" value="Add" action="#{newMusician.saveNewMusician}"/>
</p>
</form>
....
以及具有StringArrayList的托管bean:
@ManagedBean
@ViewScoped
public class NewMusician {
private ArrayList<String> strings = new ArrayList<String>();
public NewMusician() {
strings.add("olo");
}
public ArrayList<String> getStrings() {
return strings;
}
public void saveNewMusician() {
.....
}
....
}
问题:当我在其中更改文本并按保存按钮时,在saveNewMusician()方法中,我可以看到ArrayList“字符串”包含相同的旧值“olo”,但是我没有在输入字段中插入那个值。
如果使用h:selecOneMenu,则会出现相同的问题。
如果不使用字符串,而是将字符串聚合并将值设置为字符串的对象,则情况会发生变化。
因此,如果我要使用一些POJO并将inputText更改为:
<h:inputText value="#{preferredMusicGenrePojo.string}" immediate="true"/>
一切都OK。
题:
为什么使用1级吸气剂
<h:inputText value="#{preferredMusicGenre}"/>
不正确,但是使用2级吸气剂<h:inputText value="#{preferredMusicGenrePojo.text}"/>
可以吗? 最佳答案
String
是不可变的。它没有值的二传手。您需要将其包装在bean(或称为POJO)中。
public class Musician {
private String preferredGenre;
// Add/generate constructor, getter, setter, etc.
}
然后按如下所示更改您的托管bean。
@ManagedBean
@ViewScoped
public class NewMusician {
private ArrayList<Musician> musicians = new ArrayList<Musician>();
public NewMusician() {
musicians.add(new Musician("olo"));
}
public ArrayList<Musician> getMusicians() {
return musicians;
}
public void saveNewMusician() {
// ...
}
// ...
}
和您的数据表:
<h:dataTable value="#{newMusician.musicians}" var="musician">
<h:column>
<h:inputText value="#{musician.preferredGenre}" />
</h:column>
</h:dataTable>
关于java - 为什么嵌套在h:dataTable中的输入(例如h:inputText)不更新Bean模型? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4628778/
10-13 01:39