字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...
字符串url获取参数
让我们剖析几个简单的用例,并查看视图参数的工作原理(视图参数名称不是强制性的,以匹配通过URL查询字符串传递的请求参数,但在本文中,我们将重点讨论这种情况):
情况1
在index.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata>
...
<h:form>Enter name:<h:inputText value="#{playersBean.playerName}"/>Enter surname:<h:inputText value="#{playersBean.playerSurname}"/><h:commandButton value="Send" action="results?faces-redirect=true&includeViewParams=true"/>
</h:form>
在results.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata>You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>
在PlayersBean
我们有:
@Named
@RequestScoped
public class PlayersBean {private String playerName;private String playerSurname;...
}
当应用程序进入时发生了什么(设置查询字符串的方式并不重要;您可以手动执行,也可以通过 与 这里) index.xhtml?playernameparam=rafael&playersurnameparam=nadal
吗?
- 请求参数名的视图参数的名称相匹配,所以该视图参数取请求参数值,最后把它们存储在
PlayersBean
下托管beanplayerName
和playerSurname
领域。 因此,粗略地说,您可以通过视图参数设置托管bean字段。 - 视图将被渲染(生成HTML标记并将其发送到浏览器),因此您可以在文本输入中看到
rafael
和nadal
,因为它们是从托管Bean属性(即#{playersBean.playerName}
和#{playersBean.playerSurname}
)。 - 您(作为用户)可以在文本输入中手动修改这些值(文本)(或像这样保留它们)。 现在,当您单击
发送按钮,您实际上提交了具有当前值的表单(由<h:form>
分隔的部分
</h:form>
)。 因此,将提交名称和姓氏,并覆盖/初始化数据模型中的当前值(即使您没有修改它们)。 在对视图进行编码(渲染)期间,JSF还将针对PlayersBean
托管bean对视图参数进行编码。 - 此外,JSF注意到您想要在导航到下一个目标页面(
results.xhtml
)之前附加视图参数(将其表示为:?faces-redirect=true&includeViewParams=true
)。 在此请求的前面,已经根据PlayersBean
托管bean评估了视图参数。 因此,JSF处理视图参数,并将根据视图参数名称和值计算出的相应查询字符串附加到操作URL。 - JSF导航到目标URL(现在包含查询字符串)。 这是可见的,多亏了
faces-redirect=true
。
案例2
在index.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata><h:form>Enter name:<h:inputText value="#{playersBean.playerName}"/>Enter surname:<h:inputText value="#{playersBean.playerSurname}"/><h:commandButton value="Send" action="results?faces-redirect=true&includeViewParams=true"/>
</h:form>
在results.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata>You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>
在PlayersBean
我们有:
@Named
@RequestScoped
public class PlayersBean {private String playerName = "roger";private String playerSurname = "federer";...
}
当应用程序到达index.xhtml时会发生什么? (无查询字符串)
- 没有查询字符串(没有请求参数)。 因此,无法从查询字符串初始化视图参数,并且它们在
PlayersBean
也未设置任何内容! - 呈现视图(生成HTML标记并将其发送到浏览器),并且文本输入反映了
roger和federer initalization
数据(这些是评估#{playersBean.playerName}
和#{playersBean.playerSurname}
)。 - 您(作为用户)可以在文本输入中(或不可以!)修改这些值。 现在,当您单击“
Send
按钮时,您实际上提交了表单(属于由<h:form>
界定的部分的数据
</h:form>
)。 因此,将提交名称和姓氏,并覆盖/初始化模型中的当前值(即使您没有修改它们)。 在对视图进行编码(渲染)期间,JSF还将针对PlayersBean
托管bean对视图参数进行编码。 - 此外,JSF注意到您想要在导航到下一个目标页面(
results.xhtml
)之前附加视图参数(将其表示为:?faces-redirect=true&includeViewParams=true
)。 在此请求的前面,已经根据PlayersBean
托管bean评估了视图参数。 因此,JSF处理视图参数,并将根据视图参数名称和值计算出的相应查询字符串附加到操作URL。 - JSF导航到目标URL(现在包含查询字符串)。 这是可见的,多亏了
faces-redirect=true
。
案例3
在index.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata><h:link value="Send" outcome="results" includeViewParams="true"/>
在results.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata>You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>
在PlayersBean
我们有:
@Named
@RequestScoped
public class PlayersBean {private String playerName;private String playerSurname;...
}
当应用程序进入时发生了什么(设置查询字符串的方式并不重要;您可以手动执行,也可以通过 > 与 这里) index.xhtml?playernameparam=rafael&playersurnameparam=nadal
吗?
- 请求参数名称与视图参数的名称匹配,因此视图参数采用请求参数的值并将其存储在受管bean中的
playerName
和playerSurname
。 因此,您可以通过视图参数设置托管bean字段。 - 视图将被渲染(生成HTML标记并将其发送到浏览器),因此在文本输入中,您可以看到
rafael
和nadal
文本,因为它们是从托管Bean提取的(这些是评估#{playersBean.playerName}
和#{playersBean.playerSurname}
)。 在对视图进行编码(渲染)期间,JSF还将针对PlayersBean
托管bean对视图参数进行编码。 现在,检查页面的源代码,并注意对应于<h:link>
的<a href>
是如下生成的(注意,这是已fix !
)。 因此,JSF将<h:link>
转换为<a href>
并从初始请求开始附加包含视图参数的查询字符串。includeViewParams="true"
属性会导致以下链接: - 当您单击链接时,您不会提交任何数据 (
<h:link>
永远不能在<h:form>
)。 您只需执行上面的静态HTML代码,这就是一个简单的GET请求! - JSF通过此GET(包含查询字符串)导航到目标URL。 不需要
faces-redirect=true
。
案例4
在index.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata><h:link value="Send" outcome="results" includeViewParams="true"/>
在results.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata>You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>
在PlayersBean
我们有:
@Named
@RequestScoped
public class PlayersBean {private String playerName = "roger";private String playerSurname = "federer";...
}
当应用程序到达index.xhtml时会发生什么? (无查询字符串)
- 没有请求参数。 因此,无法从查询字符串初始化视图参数。 view参数也不会在托管bean中设置任何内容!
- 视图已呈现(生成了HTML标记并将其发送到浏览器),因此您可以在文本输入中看到roger和
federer
,因为它们是从托管Bean提取的(这些是评估#{playersBean.playerName}
和#{playersBean.playerSurname}
)。 在对视图进行编码(渲染)期间,JSF还将针对PlayersBean
托管bean(获取roger
和federer
)对视图参数进行编码。 现在,检查页面的源代码,并注意对应于<h:link>
的<a href>
是如下生成的(注意,这是已fix !
)。 因此,JSF将<h:link>
转换为<a href>
并从初始请求开始附加包含视图参数的查询字符串。includeViewParams="true"
属性会导致以下链接: - 单击链接时,您不会提交任何数据。 您只需执行上面的静态HTML代码,这就是一个简单的GET请求!
- JSF通过此GET(包含查询字符串)导航到目标URL。 不需要
faces-redirect=true
。
案例5
在index.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata><h:link value="Send" outcome="results" includeViewParams="true"/>
在results.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata>You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>
在PlayersBean
我们有:
@Named
@RequestScoped
public class PlayersBean {private String playerName; // this is nullprivate String playerSurname; // this is null...
}
当应用程序到达index.xhtml时会发生什么? (无查询字符串)
- 没有请求参数。 因此,无法从查询字符串初始化视图参数。 view参数在bean中没有设置任何内容!
- 视图已呈现(生成了HTML标记并将其发送到浏览器),因此您无法在文本输入中看到任何内容,因为它们是从Bean提取的(这些是
#{playersBean.playerName}
和#{playersBean.playerSurname}
其中为null
–您不能期望看到文本为null!
)。 在对视图进行编码(渲染)期间,JSF还将针对PlayersBean
托管bean(获取null
)对视图参数进行编码。 现在,检查页面的源代码,并注意对应于<h:link>
的<a href>
是如下生成的(注意,这是已fix !
)。 因此,JSF将<h:link>
转换为<a href>
,但是没有包含视图参数的查询字符串,因为JSF看到了includeViewParams="true"
属性,但无法生成以下HTML:<a href =” /…/results.xhtml? playernameparam = null &amp; playersurnameparam = null “>发送</a>”因此,JSF将“忽略”null
值,并且没有要附加的查询字符串:<a href=”/…/results.xhtml”>发送</a> - 单击链接时,您不会提交任何数据。 您只需执行上面的静态HTML代码,这就是一个简单的GET请求!
- JSF通过此GET(包含查询字符串)导航到目标URL。 不需要faces-redirect = true。
案例6 –为了更好地理解
在index.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata><h:form>Enter name:<h:inputText value="#{playersBean.playerName}"/>Enter surname:<h:inputText value="#{playersBean.playerSurname}"/><h:commandButton value="Send" action="results?faces-redirect=true&includeViewParams=true"/>
</h:form>
在results.xhtml
页面中,我们有:
<f:metadata><f:viewParam name="playernameparam" value="#{playersBean.playerName}"/> <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/>
</f:metadata>You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>
在PlayersBean
我们有:
@Named
@RequestScoped
public class PlayersBean {private String playerName; // this is nullprivate String playerSurname; // this is null...
}
当应用程序到达index.xhtml时会发生什么? (无查询字符串)
- 没有请求参数。 因此,无法从查询字符串初始化视图参数。 view参数在bean中也没有设置任何内容!
- 渲染视图(生成HTML标记并将其发送到浏览器),您可以看到两个空文本输入(这些是评估
#{playersBean.playerName}
和#{playersBean.playerSurname}
)。 您不能期望看到文本,为空! - 作为用户,请勿在这些文本输入中键入任何内容,然后按“
Send
按钮。 实际上,您将提交表单(属于<h:form>
</h:form>
界定的部分的数据)。 因此,将提交名称和姓氏(它们是空白),并覆盖/初始化模型中的当前值。 在对视图进行编码(渲染)期间,JSF还将针对PlayersBean
托管bean对视图参数进行编码(将获得空白)。 - 此外,JSF注意到您想要在导航到下一个目标页面(
results.xhtml
)之前附加视图参数(将其表示为:?faces-redirect=true&includeViewParams=true
)。 在此请求的前面,已经根据PlayersBean
托管bean评估了视图参数。 因此,JSF处理视图参数,并将根据视图参数名称和值计算出的相应查询字符串附加到操作URL。 - JSF导航到目标URL(现在包含查询字符串)。 这是可见的,多亏了
faces-redirect=true
。
http://localhost:8080/.../results.xhtml?playernameparam=&playersurnameparam=
注意playernameparam
和playersurnameparam!
的值playersurnameparam!
由于您已提交空白区域,因此您将看到。 当然,这看起来“丑陋”且非常无用。 也许您更喜欢将空白视为null
值。 为此,您可以在web.xml
设置以下上下文参数:
<context-param><param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name><param-value>true</param-value>
</context-param>
现在,清理并构建应用程序,然后在相同的情况下再次运行它。 这次,当您按
发送按钮,您会注意到此链接:
- http:// localhost:8080 / ch2_6 / faces / results.xhtml
因此,没有查询字符串反映了视图参数的存在! 好吧,您只是指示JSF将提交的空字符串视为null
值。 但是,正如您所知,附加视图参数后,“ null
值”将被“忽略”。
注意
附加视图参数的方式可以在Mojarra的com.sun.faces.application.view.MultiViewHandler
看到。 特别是在:
// Mojarra 2.2.9, MultiViewHandler#addViewParameters()
protected void addViewParameters(FacesContext ctx,String viewId,Map<String,List<String>> existingParameters) {UIViewRoot currentRoot = ctx.getViewRoot();String currentViewId = currentRoot.getViewId();Collection<UIViewParameter> toViewParams = Collections.emptyList();Collection<UIViewParameter> currentViewParams;boolean currentIsSameAsNew = false;currentViewParams = ViewMetadata.getViewParameters(currentRoot);if (currentViewId.equals(viewId)) {currentIsSameAsNew = true;toViewParams = currentViewParams;} else {ViewDeclarationLanguage pdl = getViewDeclarationLanguage(ctx, viewId);ViewMetadata viewMetadata = pdl.getViewMetadata(ctx, viewId);if (null != viewMetadata) {UIViewRoot root = viewMetadata.createMetadataView(ctx);toViewParams = ViewMetadata.getViewParameters(root);}}if (toViewParams.isEmpty()) {return;}for (UIViewParameter viewParam : toViewParams) {String value = null;// don't bother looking at view parameter if it's been overriddenif (existingParameters.containsKey(viewParam.getName())) {continue;}if (paramHasValueExpression(viewParam)) {value = viewParam.getStringValueFromModel(ctx);}if (value == null) {if (currentIsSameAsNew) {value = viewParam.getStringValue(ctx);} else {value = getStringValueToTransfer(ctx, viewParam, currentViewParams);}}// SO, IF VALUE IS NULL, DON'T CONSIDER THIS A VIEW PARAMif (value != null) {List<String> existing = existingParameters.get(viewParam.getName());if (existing == null) {existing = new ArrayList<String>(4);existingParameters.put(viewParam.getName(), existing);}existing.add(value);}}
}
翻译自: https://www.javacodegeeks.com/2015/11/how-view-parameters-are-obtainedattached-fromto-the-url-query-string-examples.html
字符串url获取参数
字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...相关推荐
- reactnative 获取定位_【React Native】定位获取经纬度,当前城市等地址信息
最近做React Native时,需要用到城市定位的功能,React Native中文网的定位部分中也提供了相应的方法.主要用到的方法有: 这里只需要获取到经纬度,城市等信息,持续监听的函数就不需要了 ...
- python 通过ip获取城市_如何根据普通ip地址获取当前地理位置
前言: 我们现在需要做的功能是根据ip地址获取当前地理位置,是Web 服务API,获取后的位置信息一般是城市级别的,不是很精确的那种获取. (1)开发者需要做的准备工作: 需要登录百度地图的api,点 ...
- mysql 5.6参数_初识 MySQL 5.6 新功能、参数
摘要: MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不定时更新). 一:性能.功能上的提升. ① 在线DDL即 onli ...
- java drawimage 参数_小程序中canvas的drawImage方法参数使用详解
最近在开发小程序,海报生成的过程中,要在carvas中不断去添加图片,对小程序的drawImage参数不是很明确,这次解惑. 示例代码 有三个版本的写法: drawImage(imageResourc ...
- python数据参数_零基础学习python数据分析——函数的参数
原标题:零基础学习python数据分析--函数的参数 上一节课中我们讲了python的函数定义,Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数 ...
- python什么是可变参数_详解Python的三种可变参数
可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中,在函数内部会自动认为是一个元组或 ...
- python收集参数_第5.2节 Python的函数参数收集
函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...
- 8145v5 参数_美图T9、iQOO Neo全参数比选、最新报价「选机参考」
请关注"手机之友",我们为您每天更新手机比选.价格.评测信息,谢谢!请点击右上角红色的关注键. 对比机型:美图T9 | iQOO Neo 最新价格:2199元|1998元 屏幕尺寸 ...
- python 超参数_完整介绍用于Python中自动超参数调剂的贝叶斯优化
完整介绍用于Python中自动超参数调剂的贝叶斯优化-1.jpg (109.5 KB, 下载次数: 0) 2018-7-4 23:45 上传 调剂机器学习超参数是一项繁琐但至关重要的任务,因为算法的性 ...
- python中什么是可变参数_详解Python的三种可变参数
详解Python的三种可变参数 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中, ...
最新文章
- 产品与技术优势发威 用友U9截击SAP ORACLE
- .jar中没有主清单属性_为什么 Spring Boot 的 jar 可以直接运行?
- led显示屏控制卡接线图解_Led显示屏出现花屏是什么原因
- 2019年容器安全最新现状研究报告解读
- ruby 发送post请求_使用Ruby发送电子邮件
- [Altera在线教学].Altera SERDES应用教学,2小时10分钟,172张胶片
- linux进程通信 bzero函数,处理Linux网络编程中的IP地址 — 通信产业...
- Quartus ii仿真界面闪退
- Dubblo +zookeep+sprinboot注册发现 (二)来源与狂神
- 【URL重写】IIS7配置URL重写
- HDU 2121 Ice_cream’s world II (最小树形图+虚根)
- Unity3d 音效 音乐 大小控制
- CLion2020调整字体大小
- 怎么确定K均值聚类中的K(基于matlab)
- 网易 Airtest Project 自动化测试框架学习(一)
- Python学习笔记_03
- Unity——Tolua框架笔记
- 如何制作一张圣诞贺卡二维码?
- 无人机项目跟踪详解七十——升压电路及LM27313详解
- NBA Finals
热门文章
- CF1628A-Meximum Array【二分】
- CF960G-Bandit Blues【第一类斯特林数,分治,NTT】
- P4068-[SDOI2016]数字配对【二分,费用流】
- jzoj4010-Philips and Calculator【搜索,dp】
- jzoj6313-Maja【dp】
- CF559C-Gerald and Giant Chess【计数类dp】
- HDU5129 - Yong Zheng's Death
- 常用公有云接入——阿里
- mybatis入门(六)之SQL语句构建器类
- Java IO: Reader和Writer