我在我的项目中使用JSF 2.x。jsf调用另一个托管bean的托管bean方法
我有两个页面和两个托管bean(请求范围)这两个页面。
Page 1在用户点击主页上的链接后加载。该链接调用Bean1的view()方法(请求参数ID =某个值),其中我们从DB加载一些数据(基于ID),然后重定向到显示此数据的页面1。
稍后,用户从第1页导航至2页,在这里我们通过相同的ID的第2页。
在页2,用户进入上保存按钮数据和点击。这将调用Bean 2的saveDetails()方法。
通过调用Bean1的view()方法并将ID作为请求参数传递给saveDetails()方法后,我想重定向到第1页。我无法直接重定向到page1,因为那时将没有数据显示,因为bean1是请求作用域。
因此,我想调用带请求参数ID的bean1.view()。即我想要达到与用户点击主页上的链接相同的行为。
如何实现这一目标?
这是迄今为止代码:
@ManagedBean
@Component
@RequestScoped
@Scope("request")
// bean for page1
public class ModifyCDSPageBean extends BasePageBean {
private DisplayTicket ticket;
private String selectedCDS;
...
...
// CDS List
private static Map<String, String> cdsList = new LinkedHashMap<String, String>();
@Autowired
TicketConsoleGTRDao ticketConsoleGTRDao;
private static final Logger LOGGER = Logger.getLogger(ModifyCDSPageBean.class);
public String viewTicketDetails() {
populateCDSList();
....
// Method updated to set DisplayInfoTravail
String id_incident = getRequestParameterValue(TicketConstants.ID_INCIDENT);
List<InfoTravail> travailsList =
ticketConsoleGTRDao.findMatchingTrvailInformation(id_incident);
....
return NavigationConstants.PAGE_MODIFY_CDS;
}
...
...
}
@ManagedBean
@Component
@RequestScoped
@Scope("request")
//Bean for page 2
public class CreateInfoTravailPageBean extends BasePageBean {
private String selectedTypeInfoTravail;
...
...
@Autowired
TicketConsoleGTRDao ticketConsoleGTRDao;
private static final Logger LOGGER = Logger.getLogger(CreateInfoTravailPageBean.class);
public String viewInfoTravail() {
populateTypeInfoTravailList();
...
...
return NavigationConstants.PAGE_CREATE_INFO_TRAVAIL;
}
public String saveInfoTravail() {
String idIncident = getRequestParameterValue(TicketConstants.ID_INCIDENT);
infoTravail.setTicketId(idIncident);
infoTravail.setDate_creation(formatter.format(new Date()));
// HERE I WANT TO CALL ModifyCDSPageBean.viewTicketDetails() method
// pass id_incident as request parameter while making this call
// because if you check ModifyCDSPageBean.viewTicketDetails above it
// looks for request parameter id_incident
}
如果这个参数是你想保持很久的东西,也许把它放到会话范围中是一个选项? – mabi
你能不能展示你的代码,看看你迄今为止做了什么? – SRy
@mabi,即使我把这个参数放在session中,这也不能解决我的问题。我想调用另一个托管bean的方法到当前的bean中。详细信息见上面的代码。谢谢。 – Yogesh