From a Spring MVC @Controller, I need to be able to call a JSF @ManagedBean.
The problem seems to be that the @ManagedBean is not visible in the Spring ApplicationContext. Is there any way to do make the following accessible:
... so it could be accessed in a @Controller like so:Code:@ManagedBean(name = "jsfService") @ViewScoped public class JsfServiceImpl implements JsfService { @ManagedProperty(value = "#{jsfDao}") private JsfDao jsfDao; ... private Long selectedId; public void setSelectedId(Long selectedId) { this.selectedId = selectedId; } ... public String doStuff() { FacesContext context = FacesContext.getCurrentInstance(); Flash flash = context.getExternalContext().getFlash(); flash.put("stuffContext", String.valueOf(this.selectedId)); flash.put("backView", context.getViewRoot().getViewId()); return "/do/stuff"; } }
I have set the following in faces-config.xml, but that seems only to make Spring beans available to JSF and not the other way around:Code:@Controller public class JsfRedirectController implements ApplicationContextAware { private ApplicationContext applicationContext; @RequestMapping("/do-jsf-stuff/{id}") public void doJsfStuffById(@PathVariable("id") long id) { JsfServiceImpl jsfService = applicationContext.getBean(JsfServiceImpl.class); jsfService.setSelectedId(id); jsfService.doStuff(); } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }
HTML Code:<application> <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> </application>


Reply With Quote