2013-06-11 3 views
0

저는 jsf에서 웹 응용 프로그램을 개발했습니다. 세션을 사용하여 다른 페이지의 개체에 액세스했습니다. 무엇보다도 먼저 다른 사용자 객체를 원한다. 세션에서 다른 키 이름으로 객체를 저장했지만 두 번째 객체를 저장하는 동안 첫 번째 객체를 대체하고있다. 다른 키 이름. 어떻게하면이 문제를 해결할 수 있을까요?JSF 세션은 동일한 객체를 다른 키에 저장하면서 기존 객체를 대체합니까?

package com.transcare.ace.bean; 

import java.io.Serializable; 

import javax.annotation.PostConstruct; 
import javax.annotation.PreDestroy; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 

import com.transcare.ace.appBean.ChoiceBean; 
import com.transcare.ace.dao.ServiceRequestDAO; 
import com.transcare.ace.utils.DisplayMessage; 
import com.transcare.ace.vo.Role; 
import com.transcare.ace.vo.ServiceCategory; 
import com.transcare.ace.vo.ServiceRequest; 
import com.transcare.ace.vo.ServiceStatus; 
import com.transcare.ace.vo.User; 

@ManagedBean(name = "userRequest") 
@ViewScoped 
public class ServiceRequestAction implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @ManagedProperty(value = "#{selectedRequest}") 
    private ServiceRequest service = null; 

    @ManagedProperty(value = "#{user}") 
    private User user = null; 

    @ManagedProperty(value = "#{pickedUser}") 
    private User pickedCustomer = null; 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    public ServiceRequest getService() { 

     return service; 
    } 

    public void setService(ServiceRequest service) { 
     this.service = service; 
    } 

    @ManagedProperty(value = "#{choices}") 
    private ChoiceBean choices = null; 

    public ChoiceBean getChoices() { 
     return choices; 
    } 

    public void setChoices(ChoiceBean choices) { 
     this.choices = choices; 
    } 

    public User getPickedCustomer() { 
     return pickedCustomer; 
    } 

    public void setPickedCustomer(User pickedCustomer) { 
     this.pickedCustomer = pickedCustomer; 
    } 

    @PostConstruct 
    public void init() { 
     /* 
     * FacesContext.getCurrentInstance().getExternalContext().getSessionMap() 
     * .remove("role"); 
     * FacesContext.getCurrentInstance().getExternalContext(
     *).getSessionMap() .remove("redirect"); 
     * FacesContext.getCurrentInstance 
     *().getExternalContext().getSessionMap() .remove("newCustomer"); 
     * FacesContext 
     * .getCurrentInstance().getExternalContext().getSessionMap() 
     * .remove("userRequest"); 
     */ 
     // System.out.println("session cleared!"); 
     service = new ServiceRequest(); 
     service.setCategory(new ServiceCategory()); 

     //pickedCustomer=(User) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("pickedUser"); 

     if (pickedCustomer != null) { 
      service.setCustomer(pickedCustomer); 
      System.out.println("Picked User value name is:" 
        + pickedCustomer.getFullName()); 
     } else { 
      System.out.println("Picked User value is null."); 
     } 

     System.out.println("Session user"); 
     System.out.println("Logged User role is:" 
       + user.getRole().getRoleName() +" and the user is: "+ user.getFullName()); 
    } 
    @PreDestroy 
    public void preDestroy(){ 
     System.out.println("View scope expires for user request!"); 
     FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("pickedUser"); 
    } 

    public String addNewServiceRequestForUser() { 
     System.out.println("main called"); 
     System.out.println(service.getTitle()); 
     System.out.println(service.getDescription()); 
     System.out.println(service.getCategory().getServiceCategoryId()); 
     ServiceStatus status = new ServiceStatus(); 
     status.setStatus("CREATED"); 
     status.setStatusId(1); 
     service.setStatus(status); 
     service.setCustomer(pickedCustomer); 

     try { 
      ServiceRequestDAO.getInstance().getrequestByUser(this); 
      DisplayMessage.setInfoMessage("dashboardForm", 
        "You have created the request successfully!", ""); 
      return "success"; 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     DisplayMessage.setInfoMessage("", 
       "Creating request is failed! Try again.", ""); 
     return null; 
    } 

    public String addNewServiceRequestWithPayment() { 
     System.out.println("main called"); 
     System.out.println(service.getTitle()); 
     System.out.println(service.getDescription()); 
     System.out.println(service.getCategory().getServiceCategoryId()); 

     try { 
      int key = ServiceRequestDAO.getInstance().getrequestByUser(this); 
      if (key > 0) { 
       DisplayMessage.setInfoMessage("dashboardForm", 
         "You have created the request successfully!", ""); 
       FacesContext.getCurrentInstance().getExternalContext() 
         .getSessionMap().put("redirect", "/pages/dashBoard"); 
       FacesContext.getCurrentInstance().getExternalContext() 
         .getSessionMap().put("serviceIdKey", key); 
       System.out.println("Process success waiting to redirect!"); 
       // System.out.print(key); 
       return "success"; 
      } 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     DisplayMessage.setInfoMessage("", 
       "Creating request is failed! Try again.", ""); 
     return null; 
    } 

    public String selectCustomer() { 
     Role role = new Role(); 
     role.setInternal(false); 
     role.setRoleId(1); 
     role.setRoleName("Customer"); 
     FacesContext.getCurrentInstance().getExternalContext().getSessionMap() 
       .remove("pickedUser"); 
     FacesContext.getCurrentInstance().getExternalContext().getSessionMap() 
       .put("role", role); 
     FacesContext.getCurrentInstance().getExternalContext().getSessionMap() 
       .put("redirect", "/pages/serviceRequest"); 
     /* 
     * FacesContext.getCurrentInstance().getExternalContext().getSessionMap() 
     * .put("newCustomer", true); 
     */ 
     return "success"; 
    } 

    public String makePayment() { 
     FacesContext.getCurrentInstance().getExternalContext().getSessionMap() 
       .put("redirect", "/pages/serviceRequest"); 
     return "success"; 
    } 
} 

이 내가 두 번째 사용자 개체를 가져 오지하기 위해 pickedUser를 사용하고 여기 내 관리 빈이지만이 사용자 객체를 대체합니다.

피커 콩 내가 키 pickedUser 와 세션에서 두 번째 사용자를 stroing있어 여기 여기

package com.transcare.ace.bean; 

import java.io.Serializable; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 

import com.transcare.ace.dao.PickUserDAO; 
import com.transcare.ace.vo.Role; 
import com.transcare.ace.vo.User; 

@ManagedBean 
@ViewScoped 
public class PickUser implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private List<User> users; 

    @ManagedProperty(value = "#{role}") 
    private Role role = null; 

    @ManagedProperty(value="#{editRequest}") 
    private EditRequest editRequest; 

    @ManagedProperty(value = "#{redirect}") 
    private String redirectTo = null; 

    //@ManagedProperty(value = "#{newCustomer}") 
    //private boolean newCustomer; 

    /*public boolean isNewCustomer() { 
     return newCustomer; 
    } 

    public void setNewCustomer(boolean newCustomer) { 
     this.newCustomer = newCustomer; 
    } 
*/ 
    public String getRedirectTo() { 
     return redirectTo; 
    } 

    public void setRedirectTo(String redirectTo) { 
     this.redirectTo = redirectTo; 
    } 

    @PostConstruct 
    public void init() { 
     users = new PickUserDAO().getAllUsers(role); 
    } 

    public EditRequest getEditRequest() { 
     return editRequest; 
    } 

    public void setEditRequest(EditRequest editRequest) { 
     this.editRequest = editRequest; 
    } 

    public List<User> getUsers() { 
     return users; 
    } 

    public void setUsers(List<User> users) { 
     this.users = users; 
    } 

    public Role getRole() { 
     return role; 
    } 

    public void setRole(Role role) { 
     this.role = role; 
    } 

    public String selectUser(User user) { 
     /*if (role.isInternal()) { 
      editRequest.getRequest().setSupplier(user); 
     } else if (isNewCustomer()) { 
      FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pickedUser", user); 
     } else { 
      ((ServiceRequest)FacesContext.getCurrentInstance() 
      .getExternalContext().getSessionMap() 
      .get("selectedService")).setCustomer(user); 
      editRequest.getRequest().setCustomer(user); 
     }*/ 
     FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pickedUser", user); 
     return redirectTo; 
    } 
} 

이지만 기존 하나를 교체합니다.

감사합니다.

답변

0

이 버그가 수정되었습니다. 로그인하는 동안 세션에 사용자 개체를 저장 한 다음 동일한 사용자 개체를 사용하여 사용자 목록을 표시하고 표시했습니다. 한 사용자를 선택하면 자동으로 세션의 기존 사용자 개체를 대체합니다. 고맙습니다.

세션

이미 #{user} 그리고 난 여기에 같은 객체 여기

<ui:repeat var="user" value="#{users}"> 
.......... 
</ui:repeat> 

자동의 기존 대체를 사용했다. 문제를 일으켜서 미안 해요. 감사합니다.

관련 문제