JSF 調用程式

package com.emprogria; import com.emprogria.util.PagingInfo; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; import javax.faces.FacesException; import com.emprogria.util.JsfUtil; import com.emprogria.exceptions.NonexistentEntityException; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.model.SelectItem; public class ContactController { public ContactController() { FacesContext facesContext = FacesContext.getCurrentInstance(); jpaController = (ContactJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "contactJpa"); pagingInfo = new PagingInfo(); converter = new ContactConverter(); } private Contact contact = null; private List<Contact> contactItems = null; private ContactJpaController jpaController = null; private ContactConverter converter = null; private PagingInfo pagingInfo = null; public PagingInfo getPagingInfo() { if (pagingInfo.getItemCount() == -1) { pagingInfo.setItemCount(jpaController.getContactCount()); } return pagingInfo; } public SelectItem[] getContactItemsAvailableSelectMany() { return JsfUtil.getSelectItems(jpaController.findContactEntities(), false); } public SelectItem[] getContactItemsAvailableSelectOne() { return JsfUtil.getSelectItems(jpaController.findContactEntities(), true); } public Contact getContact() { if (contact == null) { contact = (Contact) JsfUtil.getObjectFromRequestParameter("jsfcrud.currentContact", converter, null); } if (contact == null) { contact = new Contact(); } return contact; } public String listSetup() { reset(true); return "contact_list"; } public String createSetup() { reset(false); contact = new Contact(); return "contact_create"; } public String create() { try { jpaController.create(contact); JsfUtil.addSuccessMessage("資料已新增"); } catch (Exception e) { JsfUtil.ensureAddErrorMessage(e, "資料操作失敗"); return null; } return listSetup(); } public String detailSetup() { return scalarSetup("contact_detail"); } public String editSetup() { return scalarSetup("contact_edit"); } private String scalarSetup(String destination) { reset(false); contact = (Contact) JsfUtil.getObjectFromRequestParameter("jsfcrud.currentContact", converter, null); if (contact == null) { String requestContactString = JsfUtil.getRequestParameter("jsfcrud.currentContact"); JsfUtil.addErrorMessage("The contact with id " + requestContactString + " no longer exists."); return relatedOrListOutcome(); } return destination; } public String edit() { String contactString = converter.getAsString(FacesContext.getCurrentInstance(), null, contact); String currentContactString = JsfUtil.getRequestParameter("jsfcrud.currentContact"); if (contactString == null || contactString.length() == 0 || !contactString.equals(currentContactString)) { String outcome = editSetup(); if ("contact_edit".equals(outcome)) { JsfUtil.addErrorMessage("暫不能修改"); } return outcome; } try { jpaController.edit(contact); JsfUtil.addSuccessMessage("資料已更新"); } catch (NonexistentEntityException ne) { JsfUtil.addErrorMessage(ne.getLocalizedMessage()); return listSetup(); } catch (Exception e) { JsfUtil.ensureAddErrorMessage(e, "資料操作失敗"); return null; } return detailSetup(); } public String destroy() { String idAsString = JsfUtil.getRequestParameter("jsfcrud.currentContact"); String id = idAsString; try { jpaController.destroy(id); JsfUtil.addSuccessMessage("資料已刪除"); } catch (NonexistentEntityException ne) { JsfUtil.addErrorMessage(ne.getLocalizedMessage()); return relatedOrListOutcome(); } catch (Exception e) { JsfUtil.ensureAddErrorMessage(e, "資料操作失敗"); return null; } return relatedOrListOutcome(); } private String relatedOrListOutcome() { String relatedControllerOutcome = relatedControllerOutcome(); if (relatedControllerOutcome != null) { return relatedControllerOutcome; } return listSetup(); } public List<Contact> getContactItems() { if (contactItems == null) { getPagingInfo(); contactItems = jpaController.findContactEntities(pagingInfo.getBatchSize(), pagingInfo.getFirstItem()); } return contactItems; } public String next() { reset(false); getPagingInfo().nextPage(); return "contact_list"; } public String prev() { reset(false); getPagingInfo().previousPage(); return "contact_list"; } private String relatedControllerOutcome() { String relatedControllerString = JsfUtil.getRequestParameter("jsfcrud.relatedController"); String relatedControllerTypeString = JsfUtil.getRequestParameter("jsfcrud.relatedControllerType"); if (relatedControllerString != null && relatedControllerTypeString != null) { FacesContext context = FacesContext.getCurrentInstance(); Object relatedController = context.getApplication().getELResolver().getValue(context.getELContext(), null, relatedControllerString); try { Class<?> relatedControllerType = Class.forName(relatedControllerTypeString); Method detailSetupMethod = relatedControllerType.getMethod("detailSetup"); return (String) detailSetupMethod.invoke(relatedController); } catch (ClassNotFoundException e) { throw new FacesException(e); } catch (NoSuchMethodException e) { throw new FacesException(e); } catch (IllegalAccessException e) { throw new FacesException(e); } catch (InvocationTargetException e) { throw new FacesException(e); } } return null; } private void reset(boolean resetFirstItem) { contact = null; contactItems = null; pagingInfo.setItemCount(-1); if (resetFirstItem) { pagingInfo.setFirstItem(0); } } public void validateCreate(FacesContext facesContext, UIComponent component, Object value) { Contact newContact = new Contact(); String newContactString = converter.getAsString(FacesContext.getCurrentInstance(), null, newContact); String contactString = converter.getAsString(FacesContext.getCurrentInstance(), null, contact); if (!newContactString.equals(contactString)) { createSetup(); } } public Converter getConverter() { return converter; } }