字符串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嗎?
發送按鈕,您實際上提交了具有當前值的表單(由<h:form>分隔的部分
</h:form> )。 因此,將提交名稱和姓氏,并覆蓋/初始化數據模型中的當前值(即使您沒有修改它們)。 在對視圖進行編碼(渲染)期間,JSF還將針對PlayersBean托管bean對視圖參數進行編碼。
案例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時會發生什么? (無查詢字符串)
roger和federer initalization數據(這些是評估#{playersBean.playerName}和#{playersBean.playerSurname} )。
</h:form> )。 因此,將提交名稱和姓氏,并覆蓋/初始化模型中的當前值(即使您沒有修改它們)。 在對視圖進行編碼(渲染)期間,JSF還將針對PlayersBean托管bean對視圖參數進行編碼。
案例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嗎?
案例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時會發生什么? (無查詢字符串)
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時會發生什么? (無查詢字符串)
案例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時會發生什么? (無查詢字符串)
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查询字符串(示例)?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pcl_openmap_OpenMap教
- 下一篇: 部署被测软件应用和中间件_使用FlexD