首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表中的jsf requestscope

列表中的jsf requestscope
EN

Stack Overflow用户
提问于 2017-04-24 03:57:50
回答 1查看 266关注 0票数 0

我在JSF中有一个简单的表单,我想在ArrayList中添加与此表单关联的bean。

下面是我的表单:

代码语言:javascript
复制
    <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>

我的控制器:

代码语言:javascript
复制
@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;
    }
}

服务:

代码语言:javascript
复制
@Named
@RequestScoped
public class DefaultStoryService {

    @Inject
    StoryMock mock;

    public void save(Story story) {
        mock.addStory(story);
    }
}

ArrayList:

代码语言:javascript
复制
@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);
    }

}

和故事bean:

代码语言:javascript
复制
@Model
public class Story implements Serializable {

    private Long id;

    private String author;
}

我的问题是,当创建一个新的故事并保存它时,列表中的所有故事都会用新值更新。

在我的调试器中,在第一次调用时:

first call

第二个调用:

second call

这就像请求作用域不起作用一样。我不明白为什么bean不只是添加到列表中,而是替换之前添加的所有bean。

EN

回答 1

Stack Overflow用户

发布于 2017-04-24 12:36:00

请在控制器中的postconstruct方法中创建并分配Story对象,并且不要使用@Inject来注入它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43575840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档