我有两页:
从第一页开始:
<h:form>
<h:commandLink action="#{MedicalJourneyController.listAffectedEmployees()}" value="Manage">
<f:setPropertyActionListener value="#{element.id}" target="#{MedicalJourneyController.medicalJourneyId}" />
</h:commandLink>
</h:form>
@RequestScoped
bean #{MedicalJourneyController}
有这种方法:
public String listAffectedEmployees() {
MedicalJourney m = medicalJourneyBean.getMedicalJourneyById(medicalJourneyId);
setMesList(new ArrayList<MedicalJourneyEmployeeService>(m.getMedicalJourneyEmployeeServices()));
setSelectedMedicalJourney(m);
return "listAffectedEmployees.faces?faces-redirect=true";
}
当我使用重定向更改网址时,下一页不会显示所选的值。
答案 0 :(得分:2)
如果我理解你,你想在一个视图中选择一个项目,并在下一个视图中显示它的子项目。如果这是案例那么,有一些单一的方法可以解决这个问题,在这里我将根据您的概念/代码向您展示一种方式,所以让我们假设如下:
listMedicalJourneys.xhtml
您选择项目的视图listAffectedEmployees.xhtml
视图显示预选项目的子项目的位置我假设每个View都有自己的Controller / ManagedBean,
所以我们调用第一个medicalJourneysManager
,第二个视图affectedEmployeesManager
,都是requestScoped
豆
在medicalJourneysManager
你的选择Methode&#34; action事件应该只获取选定的ItemId,并将此选定的id传递给下一页。然后,下一页控制器应该加载子项列表。因为requestScoped Bean仅在此单个请求期间可用,并且只要您在任何地方导航,您的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;
}
这会将您重定向到显示受影响的员工
列表的下一个视图这个新视图需要其控制器&#34; affectedEmployeesManager
&#34;加载受影响的员工列表。
所以在这个托管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。