网站域名更换相应内容,广州番禺区详细地图,在哪里找给公司做网站优化的人,什么是网络营销的主要职能之一字符串url获取参数让我们剖析几个简单的用例#xff0c;并查看视图参数的工作原理#xff08;视图参数名称不是强制性的#xff0c;以匹配通过URL查询字符串传递的请求参数#xff0c;但在本文中#xff0c;我们将重点讨论这种情况#xff09;#xff1a; 情况1 在inde… 字符串url获取参数 让我们剖析几个简单的用例并查看视图参数的工作原理视图参数名称不是强制性的以匹配通过URL查询字符串传递的请求参数但在本文中我们将重点讨论这种情况 情况1 在index.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadata
...
h:formEnter name:h:inputText value#{playersBean.playerName}/Enter surname:h:inputText value#{playersBean.playerSurname}/h:commandButton valueSend actionresults?faces-redirecttrueincludeViewParamstrue/
/h:form 在results.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadataYou 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?playernameparamrafaelplayersurnameparamnadal吗 请求参数名的视图参数的名称相匹配所以该视图参数取请求参数值最后把它们存储在PlayersBean下托管bean playerName和playerSurname领域。 因此粗略地说您可以通过视图参数设置托管bean字段。 视图将被渲染生成HTML标记并将其发送到浏览器因此您可以在文本输入中看到rafael和nadal 因为它们是从托管Bean属性即#{playersBean.playerName}和#{playersBean.playerSurname} 。 您作为用户可以在文本输入中手动修改这些值文本或像这样保留它们。 现在当您单击 发送按钮您实际上提交了具有当前值的表单由h:form分隔的部分 /h:form 。 因此将提交名称和姓氏并覆盖/初始化数据模型中的当前值即使您没有修改它们。 在对视图进行编码渲染期间JSF还将针对PlayersBean托管bean对视图参数进行编码。 此外JSF注意到您想要在导航到下一个目标页面 results.xhtml 之前附加视图参数将其表示为 ?faces-redirecttrueamp;includeViewParamstrue 。 在此请求的前面已经根据PlayersBean托管bean评估了视图参数。 因此JSF处理视图参数并将根据视图参数名称和值计算出的相应查询字符串附加到操作URL。 JSF导航到目标URL现在包含查询字符串。 这是可见的多亏了faces-redirecttrue 。 案例2 在index.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadatah:formEnter name:h:inputText value#{playersBean.playerName}/Enter surname:h:inputText value#{playersBean.playerSurname}/h:commandButton valueSend actionresults?faces-redirecttrueincludeViewParamstrue/
/h:form 在results.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadataYou 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-redirecttrueamp;includeViewParamstrue 。 在此请求的前面已经根据PlayersBean托管bean评估了视图参数。 因此JSF处理视图参数并将根据视图参数名称和值计算出的相应查询字符串附加到操作URL。 JSF导航到目标URL现在包含查询字符串。 这是可见的多亏了faces-redirecttrue 。 案例3 在index.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadatah:link valueSend outcomeresults includeViewParamstrue/ 在results.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadataYou 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?playernameparamrafaelplayersurnameparamnadal吗 请求参数名称与视图参数的名称匹配因此视图参数采用请求参数的值并将其存储在受管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并从初始请求开始附加包含视图参数的查询字符串。 includeViewParamstrue属性会导致以下链接 当您单击链接时您不会提交任何数据 h:link永远不能在 h:form 。 您只需执行上面的静态HTML代码这就是一个简单的GET请求 JSF通过此GET包含查询字符串导航到目标URL。 不需要faces-redirecttrue 。 案例4 在index.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadatah:link valueSend outcomeresults includeViewParamstrue/ 在results.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadataYou 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并从初始请求开始附加包含视图参数的查询字符串。 includeViewParamstrue属性会导致以下链接 单击链接时您不会提交任何数据。 您只需执行上面的静态HTML代码这就是一个简单的GET请求 JSF通过此GET包含查询字符串导航到目标URL。 不需要 faces-redirecttrue 。 案例5 在index.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadatah:link valueSend outcomeresults includeViewParamstrue/ 在results.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadataYou 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看到了includeViewParamstrue属性但无法生成以下HTMLa 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:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadatah:formEnter name:h:inputText value#{playersBean.playerName}/Enter surname:h:inputText value#{playersBean.playerSurname}/h:commandButton valueSend actionresults?faces-redirecttrueincludeViewParamstrue/
/h:form 在results.xhtml页面中我们有 f:metadataf:viewParam nameplayernameparam value#{playersBean.playerName}/ f:viewParam nameplayersurnameparam value#{playersBean.playerSurname}/
/f:metadataYou 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-redirecttrueamp;includeViewParamstrue 。 在此请求的前面已经根据PlayersBean托管bean评估了视图参数。 因此JSF处理视图参数并将根据视图参数名称和值计算出的相应查询字符串附加到操作URL。 JSF导航到目标URL现在包含查询字符串。 这是可见的多亏了faces-redirecttrue 。 http://localhost:8080/.../results.xhtml?playernameparamplayersurnameparam 注意playernameparam和playersurnameparam!的值playersurnameparam! 由于您已提交空白区域因此您将看到。 当然这看起来“丑陋”且非常无用。 也许您更喜欢将空白视为null值。 为此您可以在web.xml设置以下上下文参数 context-paramparam-namejavax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL/param-nameparam-valuetrue/param-value
/context-param 现在清理并构建应用程序然后在相同的情况下再次运行它。 这次当您按 发送按钮您会注意到此链接 http// localhost8080 / 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,MapString,ListString existingParameters) {UIViewRoot currentRoot ctx.getViewRoot();String currentViewId currentRoot.getViewId();CollectionUIViewParameter toViewParams Collections.emptyList();CollectionUIViewParameter 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;// dont bother looking at view parameter if its 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, DONT CONSIDER THIS A VIEW PARAMif (value ! null) {ListString existing existingParameters.get(viewParam.getName());if (existing null) {existing new ArrayListString(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获取参数