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();
}