首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Prettyfaces导航的JSF

带有Prettyfaces导航的JSF
EN

Stack Overflow用户
提问于 2014-10-17 09:45:57
回答 1查看 303关注 0票数 0

在我的企业应用程序中,我使用了JSF2.2和PrettyFaces 3.3.3。

我想知道我处理导航的方式是否正确(AdminCompaniesController.java):

代码语言:javascript
复制
@ManagedBean(name = "companiesBean")
@ViewScoped
@URLMappings(mappings={
    @URLMapping(id = "admin-companies-view", pattern = "/admin/company/view/#{id}", viewId = "/admin/companyView.jsf"),
    @URLMapping(id = "admin-companies-edit", pattern = "/admin/company/edit/#{id}", viewId = "/admin/companyEdit.jsf"),
    @URLMapping(id = "admin-companies-add", pattern = "/admin/company/add", viewId = "/admin/companyAdd.jsf"),
    @URLMapping(id = "admin-companies-list", pattern = "/admin/companies", viewId = "/admin/companies.jsf")
})
public class AdminCompaniesController implements Serializable
{
    @EJB
    private CompanyService companyService;
    private Collection<Company> companies = new ArrayList<>();
    private Company company;

    @PostConstruct
    public void init()
    {   

        String viewId = NavigationUtils.getViewId();

        switch (viewId) {
            case ("admin-companies-list"):
                companies = companyService.getAllCompanies();
                break;
            case ("admin-companies-add"):
                company = new Company();
                break;
            case ("admin-companies-view"):
            case ("admin-companies-edit"):
                Long id = NavigationUtils.getParameter("id", Long.class);
                company = companyService.getCompanyById(id);
                break;
    }
}

我使用注释中的PrettyFaces参数:

NavigationUtils.getViewId()等价于PrettyContext.getCurrentInstance().getCurrentMapping().getId()

从网址:

NavigationUtils.getParameter("id", Long.class)等价于FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")

这是管理我的实体“公司”上的CRUD操作的正确方法吗?我读过关于OCPsoft和@URLAction@URLQueryParameters文档(http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html),但是我不知道如何实现它们,而不是我的开关/用例解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-23 13:50:05

@chkal说:

实际上,您应该考虑在每个映射中使用一个bean,这基本上意味着,每个页面将得到一个类。这完全是有道理的。您当前的方法看起来像是在创建一个上帝类。

上面的建议是很好的实践,避免了对case语句的需要,因为每个@URLMapping-annotated bean都有自己的显式@URLAction@PostConstruct方法。

此外,您可以使用直接注入将参数的值传递到那些bean中,而无需使用请求参数映射:

@URLMapping(id = "admin-companies-view", pattern = "/admin/company/view/#{ id : pageBean.id }", viewId = "/admin/companyView.jsf")

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

https://stackoverflow.com/questions/26422300

复制
相关文章

相似问题

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