Java源码示例:javax.faces.component.UIForm

示例1
public List<UIComponent> resolve(UIComponent component, List<UIComponent> parentComponents, String currentId,
			String originalExpression, String[] parameters) {

		List<UIComponent> result = new ArrayList<UIComponent>();
//		for (UIComponent parent : parentComponents) {
			UIComponent c = component;

			while (c != null && c.getClass() != UIViewRoot.class) {
				if (UIForm.class.isAssignableFrom(c.getClass())) {
					result.add(c);
					break;
				}
				c = c.getParent();
			}
//		}
		if (result.size() > 0) {
			return result;
		}
		throw new FacesException("Invalid search expression - the component isn't inside a form " + originalExpression);

	}
 
示例2
/**
 * @deprecated Use
 *             {@link CoreRenderer#generateErrorAndRequiredClass(javax.faces.component.UIInput, javax.faces.context.ResponseWriter, java.lang.String, java.lang.String, java.lang.String, java.lang.String) }
 *             instead
 * 
 *             Renders the CSS pseudo classes for required fields and for the
 *             error levels.
 *
 * @param input
 * @param rw
 * @param clientId
 * @throws IOException
 */
@Deprecated
public void generateErrorAndRequiredClassForLabels(UIInput input, ResponseWriter rw, String clientId,
		String additionalClass) throws IOException {
	String styleClass = getErrorAndRequiredClass(input, clientId);
	if (null != additionalClass) {
		additionalClass = additionalClass.trim();
		if (additionalClass.trim().length() > 0) {
			styleClass += " " + additionalClass;
		}
	}
	UIForm currentForm = AJAXRenderer.getSurroundingForm((UIComponent) input, true);
	if (currentForm instanceof Form) {
		if (((Form) currentForm).isHorizontal()) {
			styleClass += " control-label";
		}
	}
	if (input instanceof IResponsiveLabel) {
		String responsiveLabelClass = Responsive.getResponsiveLabelClass((IResponsiveLabel) input);
		if (null != responsiveLabelClass) {
			styleClass += " " + responsiveLabelClass;
		}
	}

	rw.writeAttribute("class", styleClass, "class");
}
 
示例3
public static void assertComponentIsInsideForm(UIComponent component, String msg, boolean throwException) {
	if (!FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Production)) {
		UIComponent c = component;
		while ((c != null) && (!(c instanceof UIForm))) {
			c = c.getParent();
		}
		if (!(c instanceof UIForm)) {
			System.out.println("Warning: The BootsFaces component " + component.getClass()
					+ " works better if put inside a form. These capabilities get lost if not put in a form:");
			if (throwException) {
				throw new FacesException(msg);
			} else {
				System.out.println(msg);
			}
		}
	}
}
 
示例4
private static void encodeFormSubmit(UIComponent component, ResponseWriter rw, boolean evenWithoutParameters)
		throws IOException {
	String parameterList = "";
	List<UIComponent> children = component.getChildren();
	for (UIComponent parameter : children) {
		if (parameter instanceof UIParameter) {
			String value = String.valueOf(((UIParameter) parameter).getValue());
			String name = ((UIParameter) parameter).getName();
			if (null != value) {
				parameterList += ",'" + name + "':'" + value + "'";
			}
		}
	}
	if (evenWithoutParameters || parameterList.length() > 0) {
		UIForm currentForm = getSurroundingForm((UIComponent) component, false);
		parameterList = "'" + currentForm.getClientId() + "',{'" + component.getClientId() + "':'"
				+ component.getClientId() + "'" + parameterList + "}";
		rw.writeAttribute("onclick",
				encodeClick((UIComponent) component) + "BsF.submitForm(" + parameterList + ");return false;", null);
	}
}
 
示例5
public static void addEventHandlingHiddenFieldsIfNotExists(FacesContext context, UIComponent component) throws IOException {

        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
        UIForm parentForm = findForm(component);
        String parentFormClientId = parentForm.getClientId(context);
        String eventSenderHiddenFieldFinalId = getEventSenderHiddenFieldId(parentFormClientId);
        String eventSenderHiddenFieldRenderedAttribute = getEventSenderHiddenFieldRenderedAttributeName(parentFormClientId);
        String eventArgumentHiddenFieldFinalId = getEventArgumentHiddenFieldId(parentFormClientId);
        String eventArgumentHiddenFieldRenderedAttribute = getEventArgumentHiddenFieldRenderedAttributeName(parentFormClientId);
        ResponseWriter writer = context.getResponseWriter();

        if (request.getAttribute(eventSenderHiddenFieldRenderedAttribute) == null) {
            renderEmptyHiddenField(eventSenderHiddenFieldFinalId, writer);
            request.setAttribute(eventSenderHiddenFieldRenderedAttribute, true);
        }

        if (request.getAttribute(eventArgumentHiddenFieldRenderedAttribute) == null) {
            renderEmptyHiddenField(eventArgumentHiddenFieldFinalId, writer);
            request.setAttribute(eventArgumentHiddenFieldRenderedAttribute, true);
        }
    }
 
示例6
public static String getSubmitJavaScriptWithArgument(FacesContext context, UIComponent component, String eventArgument) {
    UIForm parentForm = findForm(component);
    String parentFormClientId = parentForm.getClientId(context);
    String componentClientId = component.getClientId(context);
    String eventSenderHiddenFieldId = getEventSenderHiddenFieldId(parentFormClientId);
    String eventArgumentHiddenFieldId = getEventArgumentHiddenFieldId(parentFormClientId);

    StringBuilder onClickEvent = new StringBuilder();
    onClickEvent.append("document.forms['").append(parentFormClientId).append("'].elements['");
    onClickEvent.append(eventSenderHiddenFieldId).append("'].value='").append(componentClientId).append("';");

    onClickEvent.append("document.forms['").append(parentFormClientId).append("'].elements['");
    onClickEvent.append(eventArgumentHiddenFieldId).append("'].value='").append(eventArgument).append("';");

    onClickEvent.append("document.forms['").append(parentFormClientId).append("'].submit();");

    return onClickEvent.toString();
}
 
示例7
/**
 * 
 * @param context
 * @param component
 * @param uiParameterList
 * @return
 */
public static String getSubmitJavaScriptWithParameters(FacesContext context, UIComponent component,
        List<UIParameter> uiParameterList) {
    UIForm parentForm = findForm(component);
    String parentFormClientId = parentForm.getClientId(context);
    String componentClientId = component.getClientId(context);
    String eventSenderHiddenFieldId = getEventSenderHiddenFieldId(parentFormClientId);

    StringBuilder setParametersJavaScript = new StringBuilder();

    for (int i = 0; i < uiParameterList.size(); i++) {
        UIParameter parameter = uiParameterList.get(i);
        setParametersJavaScript.append("document.forms['").append(parentFormClientId).append("'].elements['")
                .append(parameter.getName()).append("'].value='").append(parameter.getValue()).append("';");

    }

    StringBuilder onClickEvent = new StringBuilder();
    onClickEvent.append("document.forms['").append(parentFormClientId).append("'].elements['");
    onClickEvent.append(eventSenderHiddenFieldId).append("'].value='").append(componentClientId).append("';");
    onClickEvent.append(setParametersJavaScript.toString());
    onClickEvent.append("document.forms['").append(parentFormClientId).append("'].submit();");

    return onClickEvent.toString();
}
 
示例8
@Override
public void decode(FacesContext context) {
    Map paramMap = context.getExternalContext().getRequestParameterMap();

    UIForm parentForm = JsfRenderUtils.findForm(this);
    String parentFormClientId = parentForm.getClientId(context);
    String eventSenderHiddenFieldId = JsfRenderUtils.getEventSenderHiddenFieldId(parentFormClientId);

    String eventSenderId = (String) paramMap.get(eventSenderHiddenFieldId);
    boolean isReset = false;

    if (this.getType() != null && this.getType().equalsIgnoreCase(INPUT_RESET_TYPE)) {
        isReset = true;
    }

    if (!isReset && (eventSenderId != null) && eventSenderId.equals(this.getClientId(context))) {
        this.queueEvent(new ActionEvent(this));
    }

}
 
示例9
/** 
 * @see javax.faces.component.UIComponent#encodeEnd(javax.faces.context.FacesContext)
 */
public void encodeEnd(FacesContext context) throws IOException
{
  ResponseWriter writer = context.getResponseWriter();
  UIComponent actionComponent = super.getParent();
  String acionElement = actionComponent.getClientId(context);
  UIForm form = getForm(actionComponent);
  if (form != null)
  {

    writer.startElement("script", null);
    writer.writeAttribute("type", "text/javascript", null);

    String functionCode = "if (document.layers) \n"
        + "document.captureEvents(Event.KEYDOWN); \n"
        + "document.onkeydown =" + "function (evt) \n {"
        + " var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : "
        + "event.keyCode; \n"
        + "var eventTarget = evt ? evt.target : event.srcElement;  \n"
        + "var textField = eventTarget.type == 'text';  \n"
        + "if (keyCode == 13 && textField) { \n "
        + "document.getElementById('" + acionElement
        + "').click();return false; }  \n" + "else  return true; }";

    writer.write(functionCode);

    writer.endElement("script");
  }
}
 
示例10
/**
 * get form
 * @param component
 * @return ui form
 */
private UIForm getForm(UIComponent component)
{
  while (component != null)
  {
    if (component instanceof UIForm)
    {
      break;
    }
    component = component.getParent();
  }
  return (UIForm) component;
}
 
示例11
/** Return the form ID of the form containing the given component */
public static String getFormId(FacesContext context, UIComponent component)
{
    while (component != null && !(component instanceof UIForm))
    {
        component = component.getParent();
    }
    if (component != null)
        return ((UIForm) component).getId();
    return null;
}
 
示例12
/** Return the form ID of the form containing the given component */
public static String getFormId(FacesContext context, UIComponent component)
{
    while (component != null && !(component instanceof UIForm))
    {
        component = component.getParent();
    }
    if (component != null)
        return ((UIForm) component).getId();
    return null;
}
 
示例13
/** Return the form ID of the form containing the given component */
public static String getFormId(FacesContext context, UIComponent component)
{
    while (component != null && !(component instanceof UIForm))
    {
        component = component.getParent();
    }
    if (component instanceof UIForm)
        return ((UIForm) component).getId();
    return null;
}
 
示例14
/**
 * Get the related form
 * @param component
 * @return
 */
public static UIForm getClosestForm(UIComponent component) {
	while (component != null) {
		if (component instanceof UIForm) {
			return (UIForm) component;
		}
		component = component.getParent();
	}
	return null;
}
 
示例15
/**
 * Finds the Form Id of a component inside a form.
 * 
 * @param fc
 *            FacesContext instance
 * @param c
 *            UIComponent instance
 * @return
 */
public static String findComponentFormId(FacesContext fc, UIComponent c) {
	UIComponent parent = c.getParent();

	while (parent != null) {
		if (parent instanceof UIForm) {
			return parent.getClientId(fc);
		}
		parent = parent.getParent();
	}
	return null;
}
 
示例16
protected static UIForm getSurroundingForm(UIComponent component, boolean lenient) {
	UIComponent c = component;
	while ((c != null) && (!(c instanceof UIForm)) && (!(c instanceof Form))) {
		c = c.getParent();
	}
	if (!(c instanceof UIForm || c instanceof Form)) {
		if (lenient) {
			return null;
		} else {
			throw new FacesException(
					"The component with the id " + component.getClientId() + " must be inside a form");
		}
	}
	return (UIForm) c;
}
 
示例17
public static boolean isHorizontalForm(UIComponent component) {
	UIForm c = getSurroundingForm(component, true);
	if (null != c && c instanceof Form) {
		return ((Form) c).isHorizontal();
	}
	return false;
}
 
示例18
/**
 * Temporal and ugly hack to prevent responsive classes to be applied to inputs inside inline forms.
 *
 * This should be removed and the logic placed somewhere else.
 * 
 * @return whether the component should render responsive classes
 */
private static boolean shouldRenderResponsiveClasses(Object r) {
    // This method only checks inputs.
    if(r instanceof UIComponent && r instanceof IResponsiveLabel) {
        UIForm form = AJAXRenderer.getSurroundingForm((UIComponent) r, true);
        if(form instanceof Form) {
            if(((Form)form).isInline()) {
                // If the form is inline, no responsive classes should be applied
                return false; 
            }
        }
    }
    
    return true;
}
 
示例19
@Override
public void decode(FacesContext context, UIComponent component) {
	Radiobutton radioButton = (Radiobutton) component;

	if (radioButton.isDisabled() || radioButton.isReadonly()) {
		return;
	}

	decodeBehaviors(context, radioButton);

	String clientId = radioButton.getClientId(context);
	String name = radioButton.getName();
	if (null == name) {
		name = "input_" + clientId;
	}

	UIForm form = findSurroundingForm(component);
	if (null == form) {
		throw new FacesException("Radiobuttons must be enclosed in a form. Client-ID of the radio button: " + clientId);
	}
	
	// AJAX fires decode to all radio buttons. Change value only for the first element
	List<UIComponent> radioButtonGroup = findComponentsByName(form, radioButton.getName());
	if (radioButtonGroup.get(0) == component) {
		List<String> legalValues = collectLegalValues(context, radioButtonGroup);
		super.decode(context, component, legalValues, "input_" + clientId);
	}
}
 
示例20
@Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
    if (!component.isRendered()) {
        return;
    }

    Tree tree = (Tree) component;
    ResponseWriter rw = context.getResponseWriter();
    String clientId = tree.getClientId();

    // check is inside form (MyFaces requires to be)
    final UIForm form = BsfUtils.getClosestForm(tree);
    if (form == null) {
        throw new FacesException("The tree component must be inside a form", null);
    }

    rw.startElement("div", tree);
    rw.writeAttribute("id", "tree_" + clientId, "id");
    renderPassThruAttributes(context, component, new String[] { "placeholder", "tabindex", "lang", "accesskey"}, true);
    String clazz = Responsive.getResponsiveStyleClass(tree, false);
    String styleClass = tree.getStyleClass();
    if (null != styleClass) {
        clazz = styleClass + clazz;
    }
    clazz = clazz.trim();
    if (clazz.length() > 0) {
        rw.writeAttribute("class", clazz, "class");
    }
    writeAttribute(rw, "style", tree.getStyle());
    rw.endElement("div");
}
 
示例21
@Override
public void encodeEnd(FacesContext context) throws IOException {
	if (!isRendered()) {
		return;
	}
	Map<String, Object> attrs = getAttributes();

	final UIForm form = BsfUtils.getClosestForm(this);
	if (form == null) {
		throw new FacesException("The default command component must be inside a form", null);
	} else {
		String target = (String)attrs.get("target");
		if(BsfUtils.isStringValued(target)) {
			ResponseWriter rw = context.getResponseWriter();
			String formId = form.getClientId();
			String actionCommandId = ExpressionResolver.getComponentIDs(context, this, target);

			rw.startElement("script", this);

			rw.writeText("" + "$(function() { " + "    $('form#"
					+ BsfUtils.escapeJQuerySpecialCharsInSelector(formId) + " input').keypress(function (e) { "
					+ "    if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) { "
					+ "        document.getElementsByName('" + actionCommandId + "')[0].click();return false; "
					+ "    } else { return true; "
					+ "    } " + "    }); " + "});", null);
			
			rw.writeText("" + "$(function() { " + "    $('form#"
					+ BsfUtils.escapeJQuerySpecialCharsInSelector(formId) + " textarea').keypress(function (e) { "
					+ "    if ((e.ctrlKey && e.which && e.which === 13) || (e.ctrlKey && e.keyCode && e.keyCode === 13)) { "
					+ "        document.getElementsByName('" + actionCommandId + "')[0].click();return false; "
					+ "    } else { return true; "
					+ "    } " + "    }); " + "});", null);
			
			rw.endElement("script");
		} else {
			throw new FacesException("The default command component needs a defined target ID", null);
		}
	}
}
 
示例22
public UIComponent findSharedDataPagerParent() {
    String dataId = getFor();
    if (dataId != null) {
        UIComponent data = findComponent(dataId);
        if (data instanceof FacesDataIterator) {
            UIComponent dataParent = data;
            while (dataParent != null) {
                UIComponent pagerParent = getParent();
                while (pagerParent != null) {
                    if (pagerParent == dataParent) {
                        // Need to check that the shared parent has a user set Id as components
                        // with autogenerated Id's are not guaranteed to generate output
                        // that is capable of being partially refreshed.
                        while (dataParent!=null) {
                        	if(HtmlUtil.isUserId(dataParent.getId())) {
                        		break;
                        	}
                        	if(dataParent instanceof UIForm) {
                        		// Form always generate an ID, even when it is auto-generated.
                        		break;
                        	}
                            dataParent = dataParent.getParent();
                        }
                        return dataParent;
                    }
                    pagerParent = pagerParent.getParent();
                }
                dataParent = dataParent.getParent();
            }
        }
    }
    return null;
}
 
示例23
/** 
 * @see javax.faces.component.UIComponent#encodeEnd(javax.faces.context.FacesContext)
 */
public void encodeEnd(FacesContext context) throws IOException
{
  ResponseWriter writer = context.getResponseWriter();
  UIComponent actionComponent = super.getParent();
  String acionElement = actionComponent.getClientId(context);
  UIForm form = getForm(actionComponent);
  if (form != null)
  {

    writer.startElement("script", null);
    writer.writeAttribute("type", "text/javascript", null);

    String functionCode = "if (document.layers) \n"
        + "document.captureEvents(Event.KEYDOWN); \n"
        + "document.onkeydown =" + "function (evt) \n {"
        + " var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : "
        + "event.keyCode; \n"
        + "var eventTarget = evt ? evt.target : event.srcElement;  \n"
        + "var textField = eventTarget.type == 'text';  \n"
        + "if (keyCode == 13 && textField) { \n "
        + "document.getElementById('" + acionElement
        + "').click();return false; }  \n" + "else  return true; }";

    writer.write(functionCode);

    writer.endElement("script");
  }
}
 
示例24
/**
 * get form
 * @param component
 * @return ui form
 */
private UIForm getForm(UIComponent component)
{
  while (component != null)
  {
    if (component instanceof UIForm)
    {
      break;
    }
    component = component.getParent();
  }
  return (UIForm) component;
}
 
示例25
/** Return the form ID of the form containing the given component */
public static String getFormId(FacesContext context, UIComponent component)
{
    while (component != null && !(component instanceof UIForm))
    {
        component = component.getParent();
    }
    if (component != null)
        return ((UIForm) component).getId();
    return null;
}
 
示例26
/** Return the form ID of the form containing the given component */
public static String getFormId(FacesContext context, UIComponent component)
{
    while (component != null && !(component instanceof UIForm))
    {
        component = component.getParent();
    }
    if (component != null)
        return ((UIForm) component).getId();
    return null;
}
 
示例27
/** Return the form ID of the form containing the given component */
public static String getFormId(FacesContext context, UIComponent component)
{
    while (component != null && !(component instanceof UIForm))
    {
        component = component.getParent();
    }
    if (component instanceof UIForm)
        return ((UIForm) component).getId();
    return null;
}
 
示例28
@Override
public void decode(FacesContext context) {
    Map paramMap = context.getExternalContext().getRequestParameterMap();

    UIForm parentForm = JsfRenderUtils.findForm(this);
    String parentFormClientId = parentForm.getClientId(context);
    String eventSenderHiddenFieldId = JsfRenderUtils.getEventSenderHiddenFieldId(parentFormClientId);

    String eventSenderId = (String) paramMap.get(eventSenderHiddenFieldId);

    if (eventSenderId != null && eventSenderId.equals(this.getClientId(context))) {
        this.queueEvent(new ActionEvent(this));
    }
}
 
示例29
public static UIForm findForm(UIComponent component) {
    UIComponent formCandidate = component.getParent();

    while (formCandidate != null && !(formCandidate instanceof UIForm)) {
        formCandidate = formCandidate.getParent();
    }

    return (UIForm) formCandidate;
}
 
示例30
public static String getSubmitJavaScript(FacesContext context, UIComponent component) {
    UIForm parentForm = findForm(component);
    String parentFormClientId = parentForm.getClientId(context);
    String componentClientId = component.getClientId(context);
    String eventSenderHiddenFieldId = getEventSenderHiddenFieldId(parentFormClientId);

    StringBuilder onClickEvent = new StringBuilder();
    onClickEvent.append("document.forms['").append(parentFormClientId).append("'].elements['");
    onClickEvent.append(eventSenderHiddenFieldId).append("'].value='").append(componentClientId);

    onClickEvent.append("';document.forms['").append(parentFormClientId).append("'].submit();");

    return onClickEvent.toString();
}