如何使用URL字符串来传递参数到JSF程序中?
如果你有下面的URL: http://your_server/your_app/product.jsf?id=777, 你可以使用下面的代码来访问所传递的参数nbsp;
FacesContext fc = FacesContext.getCurrentInstance();
String id = (String) fc.getExternalContext().getRequestParameterMap().get("id";
在JSF页面上,你也可以使用预定义的变量访问同样的参数,例如nbsp;
<h:outputText value="#{param['id']}" />
注意: 你必须直接调用该JSF页面,并且使用servlet 映射 (mapping).
如何添加上下文路径到outputLink的URL中?
在当前的JSF实现中,当在outputLink 中定义的路径以'/'开始时,没有添加上下文路径到URL中,要弥补该问题请在URL中使用 #{facesContext.externalContext.requestContextPath} 前缀.例如:
<h:outputLink value="#{facesContext.externalContext.requestContextPath}/myPage.faces">
如何从backing bean中得到当前页面的URL?
你可以通过FacesContext得到一个Http Request对象的引用,如下:
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
然后使用普通的request方法来得到路径信息.还可以使用另外一种方法:
context.getViewRoot().getViewId();
将返回你当前JSP(JSF view IDs 基本上只是JSP path names)页面的名字.
如何结束session?
你可以使用session的 invalidate方法 .
下面是一个从action方法中结束session的例子: :
public String logout() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();
return "login_page";
}
下面的代码片段示例了如何在JSP页面中结束session:
<% session.invalidate(); %><c:redirect url="loginPage.jsf" />
当用户点击Command Link后如何显示确认对话框?
h:commandLink指定了 onclick 属性为内部使用. 因此你不可以使用她了, 该问题已经在JSF1.2中修复了,对于JSF1.2以前的版本,你可以在onclick以前使用 onmousedown 事件
<script language="javascript">
function ConfirmDelete(link) {
var delete = confirm('Do you want to Delete?';
if (delete == true) {
link.onclick();
}
}
</script>
<h:commandLink action="delete" > <h:outputText value="delete it"/></h:commandLink>
如何在另外一个managed-bean 中访问一个managed-bean ?
有3种方法可以达到该目的: 使用值绑定 使用变量监视器:Using Variable Resolver 持有引用属性:Having the reference property 例如,在 faces-config.xml中有下面的声明
<managed-bean>
<managed-bean-name>person</managed-bean-name>
<managed-bean-class>demo.PersonBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean>
<managed-bean>
<managed-bean-name>bank</managed-bean-name>
<managed-bean-class>demo.BankBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean>
并且你想在Person中访问Bank
使用值绑定,代码如下:
FacesContext fc = FacesContext.getCurrentInstance();
BankBean bank = (BankBean) fc.getApplication().createValueBinding("#{bank}".getValue(fc);
使用变量监视器的代码如下: Variable Resolver:
FacesContext fc = FacesContext.getCurrentInstance();
BankBean bank = (BankBean) fc.getApplication().getVariableResolver().resolveVariable(fc, "bank";
在上面的两种方法中,第二个 managed-bean (bank)的名字被硬编码在java代码中.如果你不想硬编码你可以在managed bean声明中引用另外一个bean:
<managed-bean>
<managed-bean-name>Person</managed-bean-name>
<managed-bean-class>demo.PersonBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>bank</property-name>
<property-class>demo.BankBean</property-class>
<value>#{bank}</value>
</managed-property>
<managed-bean>
<managed-bean>
<managed-bean-name>bank</managed-bean-name>
<managed-bean-class>demo.BankBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean>
如果你有下面的URL: http://your_server/your_app/product.jsf?id=777, 你可以使用下面的代码来访问所传递的参数nbsp;
FacesContext fc = FacesContext.getCurrentInstance();
String id = (String) fc.getExternalContext().getRequestParameterMap().get("id";
在JSF页面上,你也可以使用预定义的变量访问同样的参数,例如nbsp;
<h:outputText value="#{param['id']}" />
注意: 你必须直接调用该JSF页面,并且使用servlet 映射 (mapping).
如何添加上下文路径到outputLink的URL中?
在当前的JSF实现中,当在outputLink 中定义的路径以'/'开始时,没有添加上下文路径到URL中,要弥补该问题请在URL中使用 #{facesContext.externalContext.requestContextPath} 前缀.例如:
<h:outputLink value="#{facesContext.externalContext.requestContextPath}/myPage.faces">
如何从backing bean中得到当前页面的URL?
你可以通过FacesContext得到一个Http Request对象的引用,如下:
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
然后使用普通的request方法来得到路径信息.还可以使用另外一种方法:
context.getViewRoot().getViewId();
将返回你当前JSP(JSF view IDs 基本上只是JSP path names)页面的名字.
如何结束session?
你可以使用session的 invalidate方法 .
下面是一个从action方法中结束session的例子: :
public String logout() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();
return "login_page";
}
下面的代码片段示例了如何在JSP页面中结束session:
<% session.invalidate(); %><c:redirect url="loginPage.jsf" />
当用户点击Command Link后如何显示确认对话框?
h:commandLink指定了 onclick 属性为内部使用. 因此你不可以使用她了, 该问题已经在JSF1.2中修复了,对于JSF1.2以前的版本,你可以在onclick以前使用 onmousedown 事件
<script language="javascript">
function ConfirmDelete(link) {
var delete = confirm('Do you want to Delete?';
if (delete == true) {
link.onclick();
}
}
</script>
<h:commandLink action="delete" > <h:outputText value="delete it"/></h:commandLink>
如何在另外一个managed-bean 中访问一个managed-bean ?
有3种方法可以达到该目的: 使用值绑定 使用变量监视器:Using Variable Resolver 持有引用属性:Having the reference property 例如,在 faces-config.xml中有下面的声明
<managed-bean>
<managed-bean-name>person</managed-bean-name>
<managed-bean-class>demo.PersonBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean>
<managed-bean>
<managed-bean-name>bank</managed-bean-name>
<managed-bean-class>demo.BankBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean>
并且你想在Person中访问Bank
使用值绑定,代码如下:
FacesContext fc = FacesContext.getCurrentInstance();
BankBean bank = (BankBean) fc.getApplication().createValueBinding("#{bank}".getValue(fc);
使用变量监视器的代码如下: Variable Resolver:
FacesContext fc = FacesContext.getCurrentInstance();
BankBean bank = (BankBean) fc.getApplication().getVariableResolver().resolveVariable(fc, "bank";
在上面的两种方法中,第二个 managed-bean (bank)的名字被硬编码在java代码中.如果你不想硬编码你可以在managed bean声明中引用另外一个bean:
<managed-bean>
<managed-bean-name>Person</managed-bean-name>
<managed-bean-class>demo.PersonBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>bank</property-name>
<property-class>demo.BankBean</property-class>
<value>#{bank}</value>
</managed-property>
<managed-bean>
<managed-bean>
<managed-bean-name>bank</managed-bean-name>
<managed-bean-class>demo.BankBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean>