我在JSF中有一个简单的表单,我想在ArrayList中添加与此表单关联的bean。
这是我的表格:
<h:form styleClass="form-horizontal">
<div class="row bottom-offset-20">
<div class="col-sm-4">
<div>
<h:outputLabel for="pseudo">pseudo</h:outputLabel>
</div>
<div>
<h:inputText id="pseudo" styleClass="form-control input-lg" value="${storyController.story.author}"/>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<h:commandButton action="#{storyController.save}" styleClass="btn btn-primary btn-lg" value="send.story.button"/>
</div>
</div>
</h:form>
我的控制器:
@Named
@RequestScoped
public class StoryController implements Serializable {
private DefaultStoryService defaultStoryService;
@Inject
private Story story;
@Inject
public StoryController(DefaultStoryService defaultStoryService) {
this.defaultStoryService = defaultStoryService;
}
public String save() {
defaultStoryService.save(story);
return "index.xhtml";
}
public void setStory(Story story) {
this.story = story;
}
public Story getStory() {
return story;
}
}
服务:
@Named
@RequestScoped
public class DefaultStoryService {
@Inject
StoryMock mock;
public void save(Story story) {
mock.addStory(story);
}
}
ArrayList:
@Named
@SessionScoped
public class StoryMock implements Serializable {
private List<Story> stories;
@PostConstruct
public void setupData() {
stories = new ArrayList<>();
}
public List<Story> getStories() {
return stories;
}
public void setStories(List<Story> stories) {
this.stories = stories;
}
public void addStory(Story story) {
stories.add(story);
}
}
故事豆:
@Model
public class Story implements Serializable {
private Long id;
private String author;
}
我的问题是,当创建新故事并保存时,列表中的所有故事都会使用新值进行更新。
在我的调试器中,第一次调用时:
第二个电话:
这就像请求范围不起作用。 我不明白为什么bean不只是添加到列表中,而是替换之前添加的所有bean。
答案 0 :(得分:0)
请在控制器中的postconstruct方法中创建并分配Story对象,不要使用@Inject注入它。