2016-02-20 4 views
0

У меня есть две страницы:Перенаправление мою страницу после часов: действие commandLink в JSF

  • listMedicalJourneys.xhtml
  • listAffectedEmployees.xhtml

с первой страницы:

<h:form> 
    <h:commandLink action="#{MedicalJourneyController.listAffectedEmployees()}" value="Manage"> 
     <f:setPropertyActionListener value="#{element.id}" target="#{MedicalJourneyController.medicalJourneyId}" /> 
    </h:commandLink> 
</h:form> 

@RequestScoped фасоль #{MedicalJourneyController} имеет этот метод:

public String listAffectedEmployees() { 
    MedicalJourney m = medicalJourneyBean.getMedicalJourneyById(medicalJourneyId); 
    setMesList(new ArrayList<MedicalJourneyEmployeeService>(m.getMedicalJourneyEmployeeServices())); 
    setSelectedMedicalJourney(m); 
    return "listAffectedEmployees.faces?faces-redirect=true"; 
} 

Когда я использую перенаправление для изменения URL-адреса, на следующей странице не отображается выбранное значение.

ответ

2

Если я понимаю вас правильно, вы хотите выбрать элемент внутри одного вида и отобразить его SubItems в следующем представлении. если это так, то есть seviral способы acheave этого, здесь я покажу вам путь, основанный на вашей концепции/код выше, так что позволяет предположить следующее:

  1. listMedicalJourneys.xhtml мнение, где вы выбираете пункт
  2. listAffectedEmployees.xhtml вид Где вы показываете подразделы предварительно выбранного пункта

и я предполагаю, что у вас есть для каждого ракурса своего собственного контроллера/ManagedBean,

так назовём первый medicalJourneysManager и на второй взгляд affectedEmployeesManager, оба requestScoped Фасоль

medicalJourneysManager в вашем случае «Выбор Methode» действия должны получить только выбранные ItemId, и передать этот идентификатор, выбранный на следующую страницу. Следующая страница Контроллер должен затем загрузить список подтипов. Поскольку requestScoped Bean доступен только во время этого единственного запроса, и как только вы будете перемещаться в любом месте, ваш компонент будет повторно инициализирован, а это означает, что загруженные данные будут потеряны в этот момент.

так в вашем medicalJourneysManager определить некоторые ActionMethode как это:

//JSF 2.+ 
    public String selectMedicalJourny(int medicalJourneyId) { 
     // do what ever you want before redirect, i.e. any validations, ...etc if required 
     return "listAffectedEmployees.faces?faces-redirect=true&medicalJourneyId="+medicalJourneyId; 
    } 

это будет перенаправить вас к следующему View, где вы отобразить список AffectedEmployees

Этот новый взгляд нуждается его Controller "affectedEmployeesManager "для загрузки списка affectedEmployees.

так в это удалось Bean сделать что-то вроде этого:

@PostConstruct 
private void init(){ 
    try{ 
     String medicalJourneyId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("medicalJourneyId"); 
     // now do whatever you want with it, load its subNodes/affectedEmployeesList, ...etc 
     MedicalJourney m = medicalJourneyBean.getMedicalJourneyById(medicalJourneyId); 
     setMesList(new ArrayList<MedicalJourneyEmployeeService>(m.getMedicalJourneyEmployeeServices())); 
     setSelectedMedicalJourney(m); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

более простая альтернатива commandLink использует прямую связь с этим парам без каких-либо команд действий.

вот полезный link.

+0

Спасибо Рами, я решил проблему со второй альтернативой. – sabron01

Смежные вопросы