我在我的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()
和来自网址:
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),但我不确定如何实现它们而不是我的交换机/案例解决方案。
答案 0 :(得分:1)
正如@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")