栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用JSF和导航规则创建带有参数的GET请求?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用JSF和导航规则创建带有参数的GET请求?

这是一个有趣的想法。我很想知道它在实践中如何成功。

获取导航规则

导航由NavigationHandler处理。掌握NavigationHandler并不困难,但是API不会公开其使用的规则。

如我所见,您可以:

  1. 在初始化时解析faces-config.xml并将规则存储在应用程序上下文中( easy
  2. 实现自己的NavigationHandler,它会忽略faces-config.xml中的规则或使用您自己的规则文件对其进行补充,并以某种方式公开其规则集( 可行,但需要一些工作
  3. 模拟您自己的FacesContext并将其传递给现有的导航处理程序( 很难使两个FacesContext对象在同一线程中共存并且效率极低

现在,您还有另一个问题。您将在哪里保留映射以查找视图?将它们硬编码在bean中?

使用导航规则

临时而言,我想到了两种从后端构造包含参数的URL的方法。两者都涉及定义某种bean。

<managed-bean>    <managed-bean-name>navBean</managed-bean-name>    <managed-bean-class>foo.NavBean</managed-bean-class>    <managed-bean-scope>application</managed-bean-scope></managed-bean>

资源:

package foo;import java.io.IOException;import java.io.Serializable;import java.net.URLEnprer;import javax.faces.context.ExternalContext;import javax.faces.context.FacesContext;public class NavBean implements Serializable {    private String getView() {        String viewId = "/showMessage.faces"; // or look this up somewhere        return viewId;    }        public String getUrllink() {        FacesContext context = FacesContext.getCurrentInstance();        ExternalContext extContext = context.getExternalContext();        String viewId = getView();        String navUrl = context.getExternalContext().enpreActionURL(     extContext.getRequestContextPath() + viewId);        return navUrl;    }        public String getValue() {        return "" + System.currentTimeMillis();    }        public String invokeRedirect() {        FacesContext context = FacesContext.getCurrentInstance();        ExternalContext extContext = context.getExternalContext();        String viewId = getView();        try { String charEncoding = extContext.getRequestCharacterEncoding(); String name = URLEnprer.enpre("foo", charEncoding); String value = URLEnprer.enpre(getValue(), charEncoding); viewId = extContext.getRequestContextPath() + viewId + '?' + name         + "=" + value; String urllink = context.getExternalContext().enpreActionURL(         viewId); extContext.redirect(urllink);        } catch (IOException e) { extContext.log(getClass().getName() + ".invokeRedirect", e);        }        return null;    }}

得到

对于GET请求,可以使用UIParameters设置值,并让渲染器构建参数列表。

<h:outputlink value="#{navBean.urllink}">    <f:param name="foo" value="#{navBean.value}" />    <h:outputText value="get" /></h:outputlink>

开机自检

如果要在POST操作期间将URL设置为视图,则可以使用操作中的重定向(由按钮或commandlink调用)来实现。

<h:commandlink id="myCommandlink" action="#{navBean.invokeRedirect}">    <h:outputText value="post" /></h:commandlink>

笔记

请注意,ExternalContext.enpreActionURL用于编码字符串。这是生成可跨上下文(portlet等)移植的代码的良好实践。如果您要编码指向图像或下载文件的链接,则应使用
enpreResourceURL



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号