JSF 每个页面都是提交给自己的,在页面上次显示到 IE 之前,页面的状态已经保存下来了,提交时把上次状态恢复,再用表单来填充值,再调用 action 处理,跳转到其他页是
FacesContext facesContext=FacesContext.getCurrentInstance();
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, 下面是例子。
Xiaoyi bean = (Xiaoyi)facesContext.getApplication().createValueBainding("#{xiaoyi}").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.οnclick=" thisButton.form['categoryId'].value = '02343';thisButton.form.submit();"
自然也就传了参数.
required="true"