繁体   English   中英

带有Prettyfaces导航的JSF

[英]JSF with Prettyfaces navigation

我在Entreprise应用程序中将JSF 2.2与PrettyFaces 3.3.3一起使用。

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

@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()

并从url:

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

这是在我的实体“公司”上管理CRUD操作的正确方法吗? 我已经阅读了有关@URLQueryParameters@URLAction OCPsoft文档( http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html ),但是我不确定如何实现它们我的交换机/机箱解决方案。

正如@chkal所说:

您应该真正考虑为每个映射使用一个bean,这基本上意味着您将在每个页面上获得一个类。 恕我直言,这完全有道理。 您当前的方法似乎正在创建一个神职课。

上面的建议是一种好习惯,并且避免了需要case语句的需要,因为每个@URLMapping bean将具有自己的显式@URLAction@PostConstruct方法。

另外,您可以使用直接注入将参数值传递到那些Bean中,而无需使用Request参数映射:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM