java创建session_java-打开开始页面后未创建SessionScoped bean

嗨,我是jsf的新手,有这样的问题.我有以下代码的起始页:

我有2个托管bean,一个是我的控制器bean(用于删除,创建,更新新闻),第二个是用于将有关新闻的信息存储在数据库(newsForm)中.所有bean都具有@SessionScoped批注. Controller bean具有后构造函数,该后构造函数从数据库获取所有新闻并将其设置为newsForm bean.但是,当我启动应用程序时,我看到一个空页面(因为未创建我的Controller bean).但是,当我按下调用控制器bean方法的链接时,我在应用程序控制台中找到了控制器bean创建并处理了后构造函数的过程.

也许我错了,但是我认为当会话创建由jsf创建的所有SessionScoped bean时.

如果我错了,请纠正我,或者提供建议,让我在打开起始页时如何让我的应用显示所有新闻.

更新

我在Controller bean中的构造函数:

@PostConstruct

public void init() {

try {

list();

} catch (NewsManagerException e) {

}

}

列出方法:

public String list() throws NewsManagerException {

newsForm.setNews(new News());

newsForm.setCheckBoxes(new HashMap());

newsForm.setNewsList(newsDao.getNewsList());

setAttribute(PREVIoUS_PAGE,LIST);

return LIST;

}

更新2

这是ControllerBean(与Struts中的Action类类似)

public final class ControllerBean implements Serializable {

private static final String PREVIoUS_PAGE = "prevIoUsPage";

private static final String LIST = "news";

private static final String EDIT = "edit";

private static final String VIEW = "view";

private static final String REDIRECT = "?faces-redirect=true";

private final static Log log = LogFactory.getLog(ControllerBean.class);

private INewsDao newsDao;

private NewsBean newsForm;

public ControllerBean() {

}

@PostConstruct

public void init() {

list();

}

public String list() {

newsForm.setNews(new News());

newsForm.setCheckBoxes(new HashMap());

try {

newsForm.setNewsList(newsDao.getNewsList());

} catch (NewsManagerException e) {

log.error(e);

}

setAttribute(PREVIoUS_PAGE,LIST);

return LIST;

}

public String add() {

News news = new News();

news.setNewsDate(new Date());

newsForm.setNews(news);

return EDIT;

}

private void setAttribute(String name,String value) {

Map sessionMap = FacesContext.getCurrentInstance()

.getExternalContext().getSessionMap();

sessionMap.put(name,value);

}

private String getAttribute(String name) {

Map sessionMap = FacesContext.getCurrentInstance()

.getExternalContext().getSessionMap();

return (String) sessionMap.get(name);

}

public String save() {

int id = newsForm.getNews().getId();

setAttribute(PREVIoUS_PAGE,VIEW);

try {

if (id == 0) {

newsDao.createNews(newsForm.getNews());

return VIEW;

}

newsDao.editNews(newsForm.getNews());

} catch (NewsManagerException e) {

log.error(e);

}

return VIEW;

}

public String edit(int id) {

try {

News news = newsDao.getNewsById(id);

newsForm.setNews(news);

} catch (NewsManagerException e) {

log.error(e);

}

return EDIT;

}

public String view(int id) {

try {

setAttribute(PREVIoUS_PAGE,VIEW);

newsForm.setNews(newsDao.getNewsById(id));

} catch (NewsManagerException e) {

log.error(e);

}

return VIEW;

}

public String cancel() {

String page = getAttribute(PREVIoUS_PAGE);

News news = newsForm.getNews();

try {

if (news.getId() != 0) {

int id = news.getId();

news = newsDao.getNewsById(id);

newsForm.setNews(news);

}

} catch (NewsManagerException e) {

log.error(e);

}

return page;

}

public String delete() {

try {

setAttribute(PREVIoUS_PAGE,LIST);

Map allCheckBoxes = newsForm.getCheckBoxes();

Set checkBoxes = newsForm.getCheckBoxes().keySet();

Set checkedCheckBoxes = new HashSet<>();

for (Integer id : checkBoxes) {

boolean value = allCheckBoxes.get(id);

if (value) {

checkedCheckBoxes.add(id);

}

}

if (checkedCheckBoxes.size() != 0) {

newsDao.deleteNewsById(checkedCheckBoxes.toArray());

} else {

Integer[] delete = { newsForm.getNews().getId() };

newsDao.deleteNewsById(delete);

}

newsForm.setNewsList(newsDao.getNewsList());

} catch (NewsManagerException e) {

log.error(e);

}

return list() + REDIRECT;

}

public INewsDao getNewsDao() {

return newsDao;

}

public void setNewsDao(INewsDao newsDao) {

this.newsDao = newsDao;

}

public NewsBean getNewsForm() {

return newsForm;

}

public void setNewsForm(NewsBean newsForm) {

this.newsForm = newsForm;

}

}

NewsBean(简单的bean在Struts中充当ActionForm元素)

public final class NewsBean implements Serializable {

private static final long serialVersionUID = 1L;

private News news;

private List newsList;

private Map checkBoxes = new HashMap<>();

public NewsBean() {

}

public News getNews() {

return news;

}

public void setNews(News news) {

this.news = news;

}

public List getNewsList() {

return newsList;

}

public void setNewsList(List newsList) {

this.newsList = newsList;

}

public Map getCheckBoxes() {

return checkBoxes;

}

public void setCheckBoxes(Map checkBoxes) {

this.checkBoxes = checkBoxes;

}

}

制图

controller

com.epam.newsmanagement.beans.ControllerBean

session

newsDao

#{jpaDao}

newsForm

#{newsForm}

newsForm

com.epam.newsmanagement.beans.NewsBean

session

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值