📄 htmllinkrendererbase.java
字号:
} UIForm nestingForm = null; String formName; DummyFormResponseWriter dummyFormResponseWriter; if (parent != null) { //link is nested inside a form nestingForm = (UIForm)parent; formName = nestingForm.getClientId(facesContext); dummyFormResponseWriter = null; } else { //not nested in form, we must add a dummy form at the end of the document formName = DummyFormUtils.DUMMY_FORM_NAME; dummyFormResponseWriter = DummyFormUtils.getDummyFormResponseWriter(facesContext); dummyFormResponseWriter.setWriteDummyForm(true); } StringBuffer onClick = new StringBuffer(); String commandOnclick; if (component instanceof HtmlCommandLink) { commandOnclick = ((HtmlCommandLink)component).getOnclick(); } else { commandOnclick = (String)component.getAttributes().get(HTML.ONCLICK_ATTR); } if (commandOnclick != null) { onClick.append(commandOnclick); onClick.append(';'); } //call the clear_<formName> method onClick.append(HtmlRendererUtils.getClearHiddenCommandFormParamsFunctionName(formName)).append("();"); String jsForm = "document.forms['" + formName + "']"; if (MyfacesConfig.getCurrentInstance(facesContext.getExternalContext()).isAutoScroll()) { JavascriptUtils.appendAutoScrollAssignment(onClick, formName); } //add id parameter for decode String hiddenFieldName = HtmlRendererUtils.getHiddenCommandLinkFieldName(formName); onClick.append(jsForm); onClick.append(".elements['").append(hiddenFieldName).append("']"); onClick.append(".value='").append(clientId).append("';"); if (nestingForm != null) { HtmlFormRendererBase.addHiddenCommandParameter(nestingForm, hiddenFieldName); } else { dummyFormResponseWriter.addDummyFormParameter(hiddenFieldName); } //add child parameters for (Iterator it = component.getChildren().iterator(); it.hasNext(); ) { UIComponent child = (UIComponent)it.next(); if (child instanceof UIParameter) { String name = ((UIParameter)child).getName(); Object value = ((UIParameter)child).getValue(); renderLinkParameter(dummyFormResponseWriter, name, value, onClick, jsForm, nestingForm); } } // target String target = ((HtmlCommandLink)component).getTarget(); if (target != null && target.trim().length() > 0) { onClick.append(jsForm); onClick.append(".target='"); onClick.append(target); onClick.append("';"); } // onSubmit onClick.append("if("+jsForm+".onsubmit){"+jsForm+".onsubmit();}"); //submit onClick.append(jsForm); onClick.append(".submit();return false;"); //return false, so that browser does not handle the click writer.startElement(HTML.ANCHOR_ELEM, component); writer.writeURIAttribute(HTML.HREF_ATTR, "#", null); writer.writeAttribute(HTML.ONCLICK_ATTR, onClick.toString(), null); } protected void renderNonJavaScriptAnchorStart(FacesContext facesContext, ResponseWriter writer, UIComponent component, String clientId) throws IOException { ViewHandler viewHandler = facesContext.getApplication().getViewHandler(); String viewId = facesContext.getViewRoot().getViewId(); String path = viewHandler.getActionURL(facesContext, viewId); StringBuffer hrefBuf = new StringBuffer(path); //add clientId parameter for decode if (path.indexOf('?') == -1) { hrefBuf.append('?'); } else { hrefBuf.append('&'); } String hiddenFieldName = HtmlRendererUtils.getHiddenCommandLinkFieldName(HtmlRendererUtils.getFormName(component, facesContext)); hrefBuf.append(hiddenFieldName); hrefBuf.append('='); hrefBuf.append(clientId); if (component.getChildCount() > 0) { addChildParametersToHref(component, hrefBuf, false, //not the first url parameter writer.getCharacterEncoding()); } StateManager stateManager = facesContext.getApplication().getStateManager(); if (stateManager.isSavingStateInClient(facesContext)) { hrefBuf.append("&"); hrefBuf.append(URL_STATE_MARKER); } String href = facesContext.getExternalContext().encodeActionURL(hrefBuf.toString()); writer.startElement(HTML.ANCHOR_ELEM, component); writer.writeURIAttribute(HTML.HREF_ATTR, facesContext.getExternalContext().encodeActionURL(href), null); } private void addChildParametersToHref(UIComponent linkComponent, StringBuffer hrefBuf, boolean firstParameter, String charEncoding) throws IOException { for (Iterator it = linkComponent.getChildren().iterator(); it.hasNext(); ) { UIComponent child = (UIComponent)it.next(); if (child instanceof UIParameter) { String name = ((UIParameter)child).getName(); Object value = ((UIParameter)child).getValue(); addParameterToHref(name, value, hrefBuf, firstParameter, charEncoding); firstParameter = false; } } } protected void renderOutputLinkStart(FacesContext facesContext, UIOutput output) throws IOException { ResponseWriter writer = facesContext.getResponseWriter(); //calculate href String href = RendererUtils.getStringValue(facesContext, output); if (output.getChildCount() > 0) { StringBuffer hrefBuf = new StringBuffer(href); addChildParametersToHref(output, hrefBuf, (href.indexOf('?') == -1), //first url parameter? writer.getCharacterEncoding()); href = hrefBuf.toString(); } href = facesContext.getExternalContext().encodeResourceURL(href); //TODO: or encodeActionURL ? //write anchor writer.startElement(HTML.ANCHOR_ELEM, output); writer.writeAttribute(HTML.ID_ATTR, output.getClientId(facesContext), null); writer.writeURIAttribute(HTML.HREF_ATTR, href, null); HtmlRendererUtils.renderHTMLAttributes(writer, output, HTML.ANCHOR_PASSTHROUGH_ATTRIBUTES); writer.flush(); } private void renderLinkParameter(DummyFormResponseWriter dummyFormResponseWriter, String name, Object value, StringBuffer onClick, String jsForm, UIForm nestingForm) { if (name == null) { throw new IllegalArgumentException("Unnamed parameter value not allowed within command link."); } onClick.append(jsForm); onClick.append(".elements['").append(name).append("']"); //UIParameter is no ValueHolder, so no conversion possible String strParamValue = value != null ? value.toString() : ""; //TODO: Use Converter? onClick.append(".value='").append(strParamValue).append("';"); if (nestingForm != null) { //renderHiddenParam(writer, name); HtmlFormRendererBase.addHiddenCommandParameter(nestingForm, name); } else { dummyFormResponseWriter.addDummyFormParameter(name); } } private static void addParameterToHref(String name, Object value, StringBuffer hrefBuf, boolean firstParameter, String charEncoding) throws UnsupportedEncodingException { if (name == null) { throw new IllegalArgumentException("Unnamed parameter value not allowed within command link."); } hrefBuf.append(firstParameter ? '?' : '&'); hrefBuf.append(URLEncoder.encode(name, charEncoding)); hrefBuf.append('='); if (value != null) { //UIParameter is no ConvertibleValueHolder, so no conversion possible hrefBuf.append(URLEncoder.encode(value.toString(), charEncoding)); } } protected void renderLinkEnd(FacesContext facesContext, UIComponent component) throws IOException { ResponseWriter writer = facesContext.getResponseWriter(); // force separate end tag writer.writeText("", null); writer.endElement(HTML.ANCHOR_ELEM); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -