Add validators in dynaform components

Community Driven Extensions Project
Post Reply
darshil.soni
Posts: 2
Joined: 16 Apr 2014, 08:23

16 Apr 2014, 09:02

Hi,

I'm developing a page using <pe:dynaForm>.
Now, when I add validator to inputText field as shown below :

Code: Select all

 <pe:dynaFormControl type="input" for="txt" >
		  <h:outputText id="outtxt" value="#{data.validationRule}"/> 
		  <h:inputText id="txt" value="#{data.value}"	required="#{data.required}" onblur = "#{data.onBlur}" label="#{data.label}" >
			<f:validator validatorId = "#{data.validationRule}" disabled="true" />
		  </h:inputText>
	    </pe:dynaFormControl>

I can get validator rule name in outputText but when I set disabled=false in <f:validator > then I'm getting error :
"javax.servlet.ServletException: Expression Error: Named Object: ' not found...."

Please provide your input on how to add validator on input controls in DynaForms.

Regards,
Darshil Soni.

User avatar
Oleg
Expert Member
Posts: 3805
Joined: 02 Oct 2009, 09:41
Location: Germany, Black Forest

18 Apr 2014, 21:31

f:validator works for me in pe:dynaForm. I didn't test it with disabled="false", but can not see any problems for that. Have you tried the same in a PrimeFaces p:dataTable or p:tree? There are no differences to pe:dynaForm because pe:dynaForm is a data iteration component (UIData) as well.

Please also post the complete stack trace.
PrimeFaces Cookbook (2. edition): http://ova2.github.io/primefaces-cookbook/ Learning Angular UI Development with PrimeNG: https://github.com/ova2/angular-develop ... th-primeng Blog: https://medium.com/@OlegVaraksin

darshil.soni
Posts: 2
Joined: 16 Apr 2014, 08:23

22 Apr 2014, 14:43

Hi,

As you mentioned, I can also run this code with disabled = "true" but when I make it disabled = "false" it will evaluate "#{data.validationRule}" of f:validator tag and it will throw below exception of not able to bind validator named as "Single Quote" :

Exception
javax.faces.FacesException: Expression Error: Named Object: ' not found.
com.sun.faces.application.ApplicationImpl.createValidator(ApplicationImpl.java:1596)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.createValidator(ValidatorTagHandlerDelegateImpl.java:245)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyAttachedObject(ValidatorTagHandlerDelegateImpl.java:133)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyNested(ValidatorTagHandlerDelegateImpl.java:212)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.apply(ValidatorTagHandlerDelegateImpl.java:88)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
com.sun.faces.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:211)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)
com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:161)
com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:980)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)



I think data pojo is not evaluated in child components like <f:validator> and <f:converter> .
Please give me proper guidance on how to add validator, converters and ajax calls dynamically in Dynaforms.
and Requesting you to please add a sample code of "Dynaforms with validator" in your "Extensions Show case".


Below is my Data pojo.

Code: Select all

public class FormControl {

private String name;
	private Object value;
	private int colspan;
	private int rowspan;
	private String label;
	private String type;
	private boolean required;
	private String onClick;
	private String onChange;
	private String onBlur;
	private String validationRule;
	
	public FormControl(String name, String type, boolean required, 
			String onClick, String onBlur, String onChange, int colspan, int rowspan, String validationRule, ){
		this.name = name;
		this.type = type;
		this.required = required;
		this.onClick = onClick;
		this.onBlur = onBlur;
		this.onChange = onChange;
                this.colspan = colspan;
		this.rowspan = rowspan;
		this.validationRule = validationRule;
		this.label = label;
		
	}

        public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
 
       public int getColspan() {
		return colspan;
	}

	public void setColspan(int colspan) {
		this.colspan = colspan;
	}

	public int getRowspan() {
		return rowspan;
	}

	public void setRowspan(int rowspan) {
		this.rowspan = rowspan;
	}

	public boolean getRequired() {
		return required;
	}

	public void setRequired(boolean required) {
		this.required = required;
	}

	public String getOnClick() {
		return onClick;
	}

	public void setOnClick(String onClick) {
		this.onClick = onClick;
 	}

	public String getOnChange() {
		return onChange;
	 }

	public void setOnChange(String onChange) {
		this.onChange = onChange;
 	}

	public String getOnBlur() {
		return onBlur;
 	}

	public void setOnBlur(String onBlur) {
		this.onBlur = onBlur;
 	}

	public String getType() {
 		return type;
 	}

	public void setType(String type) {
 		this.type = type;
 	}
	
	public String getValidationRule() {
		return validationRule;
  	}

	public void setValidationRule(String validationRule) {
		this.validationRule = validationRule;
 	}

	public String getLabel() {
		return label;
	}

	public void setLabel(String label) {
		this.label = label;
	}

	

html code :

Code: Select all

       <pe:dynaFormControl type="input" for="txt" >
        <h:outputText id="outtxt" value="#{data.validationRule}"/>
        <h:inputText id="txt" value="#{data.value}"   required="#{data.required}" onblur = "#{data.onBlur}" label="#{data.label}" >
         <f:validator validatorId = "#{data.validationRule}" disabled="true" />
        </h:inputText>
       </pe:dynaFormControl>

I checked this with <p:dataTable > and in dataTable also, I couldn't get the value of #{data.validationRule}.
Please do the need full.

Regards,
Darshil Soni.

User avatar
Oleg
Expert Member
Posts: 3805
Joined: 02 Oct 2009, 09:41
Location: Germany, Black Forest

23 Apr 2014, 22:46

Try to use the validator tag for h:inputText or p:inputText.

<h:inputText validator="...." .../>

You can e.g. attach the validatorId via f:attribute

<h:inputText validator="...." ...>
<f:attribute name="validatorId" value="#{data.validationRule}"/>
</h:inputText>

The validatorId can be accessed via component.getAttributes().get("validatorId") then and you can create a validator with new programmaticaly. This should work. There are many ways. Ask in an JSF forum. This is not PF Extensions related.
PrimeFaces Cookbook (2. edition): http://ova2.github.io/primefaces-cookbook/ Learning Angular UI Development with PrimeNG: https://github.com/ova2/angular-develop ... th-primeng Blog: https://medium.com/@OlegVaraksin

Post Reply

Return to “Extensions”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 22 guests