a: 
JSF 每个页面都是提交给自己的,在页面上次显示到  IE 之前,页面的状态已经保存下来了,提交时把上次状态恢复,再用表单来填充值,再调用 action 处理,跳转到其他页是
 1 : 设置当前视图为新页面, facesContext.getCurrentInstance().getViewRoot().setViewId("/login.jsp");,设置后再调用 facesContext.renderResponse 直接返回.
 2 :如果你的 action 处理后再跳转的话就没有必要这样的了,只要在 faces-config.xml 中配置 outcome (也就是 from-outcome 值) ,然后就在你的  action 中 return ${outcome} , 或者  <h:commandButton action = "outcomeId" />  如果要用重定向而不是 forward, 只要在  outcome 另个子标签 <redirect id="随便写个ID,只要有就行,现在根本不用" />
b: 怎么访问其他  ManagedBean,  下面是例子。
MyBean bean = (MyBean)facesContext.getApplication().createValueBainding("#{myManagedBean}").getValue(facesContext);requestScope = (Map) facesContext
.getApplication()
.createValueBinding("#{requestScope}")
.getValue(facesContext);
sessionScope = (Map) facesContext
.getApplication()
.createValueBinding("#{sessionScope}")
.getValue(facesContext);
applicationScope = (Map) facesContext
.getApplication()
.createValueBinding("#{applicationScope}")
.getValue(facesContext);
requestParam = (Map) facesContext
.getApplication()
.createValueBinding("#{param}")
.getValue(facesContext);c: 按钮传参数:
<h:commandButton ...> <f:param name='categoryId' value="#{categoryBean.categoryId}" /></h:commandButton>JSF 在页面显示时会为这个 button 生成 类似这样的 js 代码: thisButton.onclick=" thisButton.form['categoryId'].value = '02343';thisButton.form.submit();"   自然也就传了参数.以上是  Sun JSF RI 1.1 的实现.