2014-10-17 99 views
0

我在我的Entreprise应用程序中使用JSF 2.2和PrettyFaces 3.3.3。带有Prettyfaces导航的JSF

我想知道如果我处理导航的方式是正确的(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),但我不知道如何实现它们而不是我的开关/案例解决方案。

+1

你真的应该考虑使用一个单一的豆为每个映射基本上然后意思是说,你最终会得到每页一个类。恕我直言,这完全有道理。你目前的方法看起来像你正在创造一个神级。 – chkal 2014-10-17 13:49:06

+0

所以我应该创造尽可能多的豆,因为我有意见?在这种情况下:列表,编辑,添加和查看。 – Thrax 2014-10-17 14:04:56

+1

@Thrax,为每个视图创建一个bean。如果你有共同的功能来分享accross,把它放在一个父bean中,并从它扩展。注释必须位于子bean中。 – 2014-10-17 22:45:54

回答

1

由于@chkal说:

你真的应该考虑使用一个单一的豆为每个映射 基本上然后将意味着,你最终会得到一个每页 类。恕我直言,这完全有道理。你目前的方法看起来像你正在创造一个神级的 。

以上的建议是很好的做法,并防止了case语句的需要,因为每个@URLMapping -annotated豆将有自己明确的@URLAction@PostConstruct方法。

此外,还可以使用直接注射来传递参数到这些豆类的值,而无需使用请求参数地图:

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