You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Peter Steiner <ma...@siag.it> on 2007/08/30 18:10:37 UTC

t:dataTable: how to change css-style on single cells after conversion error?

I have a t:dataTable where users can input numbers (a worksheet like in
excel).
I wrote a custom converter in order to convert the Strings to a Number. If
the format is not the one I expect I would like to change the css-styleClass
of the cell(s) with wrong input so the user can see quickly in which cell
the error happened (and additionally I print an error-message on top of the
screen).

      <t:dataTable var="row" value="#{Bean.list}" >
	<t:column>
		<t:inputText value="#{row.value}" converter="myConverter"
	                 styleClass="#{StyleBean.style]}" />
	</t:column>
              ...
       </t:dataTable>

My converter works, but I don't know how to change the style of the
input-component. The following code does not work, it changes me the error
class of the whole column!

	public Double getAsObject(FacesContext fc, UIComponent uc, String asString)
			throws ConverterException {
		
		Double doubleValue = null;
		try {
                                  ..... //convert the string to a double
		} catch (Exception e) {
                                     
((HtmlInputText)uc).setStyleClass("errorStyle");
                                       FacesMessage facesMessage = ....
			throw new ConverterException(facesMessage);
		}
		return doubleValue;
	}

Does anyone know how I can solve this problem?
Any help is appreciated.

Many Thanks
Peter
-- 
View this message in context: http://www.nabble.com/t%3AdataTable%3A-how-to-change-css-style-on-single-cells-after-conversion-error--tf4355282.html#a12410633
Sent from the MyFaces - Users mailing list archive at Nabble.com.


Re: t:dataTable: how to change css-style on single cells after conversion error?

Posted by Andrew Robinson <an...@gmail.com>.
Just write a wrapper component yourself that you would put as the
parent in the component tree, it should be easy to do.

Option 1, use invalid:
encodeBegin(...) {
  UIInput child = getChildren().get(0);
  if (!child.isValid())
  {
    // do error encoding here
  }
  else
  {
    // non-error encoding here
  }
}

Option 2: use message:
encodeBegin(...) {
  UIInput child = getChildren().get(0);
  Iterator iter = facesContext.getMessages(child.getClientId(facesContext));
  // option 1: just switch on existence
  if (iter.hasNext()) {
    // has message code here
  }
  FacesMessage.Severity sev = null;
  // option 2: switch off of severity
  FacesMessage msg;
  while ((msg = (FacesMessage)iter.next()) != null) {
    if (sev == null || msg.getSeverity().getOrdinal() > sev.getOrdinal()) {
      sev = msg.getSeverity();
    }
  }
  if (sev != null && sev.getOrdinal() >=
FacesMessage.SEVERITY_ERROR.getOrdinal()) {
    // has error code here.
  }
}

On 8/31/07, Peter Steiner <ma...@siag.it> wrote:
>
> I can't change to Seam anymore.
> Didn't anyone face the same problem with MyFaces?
>
>
>
> Andrew Robinson-5 wrote:
> >
> > If you want to use Seam they have the ability to wrap components with
> > messages:
> >
> > http://docs.jboss.org/seam/1.2.1.GA/reference/en/html_single/#validation
> >
> > On 8/30/07, Peter Steiner <ma...@siag.it> wrote:
> >>
> >> I have a t:dataTable where users can input numbers (a worksheet like in
> >> excel).
> >> I wrote a custom converter in order to convert the Strings to a Number.
> >> If
> >> the format is not the one I expect I would like to change the
> >> css-styleClass
> >> of the cell(s) with wrong input so the user can see quickly in which cell
> >> the error happened (and additionally I print an error-message on top of
> >> the
> >> screen).
> >>
> >>       <t:dataTable var="row" value="#{Bean.list}" >
> >>         <t:column>
> >>                 <t:inputText value="#{row.value}" converter="myConverter"
> >>                          styleClass="#{StyleBean.style]}" />
> >>         </t:column>
> >>               ...
> >>        </t:dataTable>
> >>
> >> My converter works, but I don't know how to change the style of the
> >> input-component. The following code does not work, it changes me the
> >> error
> >> class of the whole column!
> >>
> >>         public Double getAsObject(FacesContext fc, UIComponent uc, String
> >> asString)
> >>                         throws ConverterException {
> >>
> >>                 Double doubleValue = null;
> >>                 try {
> >>                                   ..... //convert the string to a double
> >>                 } catch (Exception e) {
> >>
> >> ((HtmlInputText)uc).setStyleClass("errorStyle");
> >>                                        FacesMessage facesMessage = ....
> >>                         throw new ConverterException(facesMessage);
> >>                 }
> >>                 return doubleValue;
> >>         }
> >>
> >> Does anyone know how I can solve this problem?
> >> Any help is appreciated.
> >>
> >> Many Thanks
> >> Peter
> >> --
> >> View this message in context:
> >> http://www.nabble.com/t%3AdataTable%3A-how-to-change-css-style-on-single-cells-after-conversion-error--tf4355282.html#a12410633
> >> Sent from the MyFaces - Users mailing list archive at Nabble.com.
> >>
> >>
> >
> >
>
> --
> View this message in context: http://www.nabble.com/t%3AdataTable%3A-how-to-change-css-style-on-single-cells-after-conversion-error--tf4355282.html#a12421299
> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>
>

Re: t:dataTable: how to change css-style on single cells after conversion error?

Posted by Peter Steiner <ma...@siag.it>.
I can't change to Seam anymore.
Didn't anyone face the same problem with MyFaces? 



Andrew Robinson-5 wrote:
> 
> If you want to use Seam they have the ability to wrap components with
> messages:
> 
> http://docs.jboss.org/seam/1.2.1.GA/reference/en/html_single/#validation
> 
> On 8/30/07, Peter Steiner <ma...@siag.it> wrote:
>>
>> I have a t:dataTable where users can input numbers (a worksheet like in
>> excel).
>> I wrote a custom converter in order to convert the Strings to a Number.
>> If
>> the format is not the one I expect I would like to change the
>> css-styleClass
>> of the cell(s) with wrong input so the user can see quickly in which cell
>> the error happened (and additionally I print an error-message on top of
>> the
>> screen).
>>
>>       <t:dataTable var="row" value="#{Bean.list}" >
>>         <t:column>
>>                 <t:inputText value="#{row.value}" converter="myConverter"
>>                          styleClass="#{StyleBean.style]}" />
>>         </t:column>
>>               ...
>>        </t:dataTable>
>>
>> My converter works, but I don't know how to change the style of the
>> input-component. The following code does not work, it changes me the
>> error
>> class of the whole column!
>>
>>         public Double getAsObject(FacesContext fc, UIComponent uc, String
>> asString)
>>                         throws ConverterException {
>>
>>                 Double doubleValue = null;
>>                 try {
>>                                   ..... //convert the string to a double
>>                 } catch (Exception e) {
>>
>> ((HtmlInputText)uc).setStyleClass("errorStyle");
>>                                        FacesMessage facesMessage = ....
>>                         throw new ConverterException(facesMessage);
>>                 }
>>                 return doubleValue;
>>         }
>>
>> Does anyone know how I can solve this problem?
>> Any help is appreciated.
>>
>> Many Thanks
>> Peter
>> --
>> View this message in context:
>> http://www.nabble.com/t%3AdataTable%3A-how-to-change-css-style-on-single-cells-after-conversion-error--tf4355282.html#a12410633
>> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/t%3AdataTable%3A-how-to-change-css-style-on-single-cells-after-conversion-error--tf4355282.html#a12421299
Sent from the MyFaces - Users mailing list archive at Nabble.com.


Re: t:dataTable: how to change css-style on single cells after conversion error?

Posted by Andrew Robinson <an...@gmail.com>.
If you want to use Seam they have the ability to wrap components with messages:

http://docs.jboss.org/seam/1.2.1.GA/reference/en/html_single/#validation

On 8/30/07, Peter Steiner <ma...@siag.it> wrote:
>
> I have a t:dataTable where users can input numbers (a worksheet like in
> excel).
> I wrote a custom converter in order to convert the Strings to a Number. If
> the format is not the one I expect I would like to change the css-styleClass
> of the cell(s) with wrong input so the user can see quickly in which cell
> the error happened (and additionally I print an error-message on top of the
> screen).
>
>       <t:dataTable var="row" value="#{Bean.list}" >
>         <t:column>
>                 <t:inputText value="#{row.value}" converter="myConverter"
>                          styleClass="#{StyleBean.style]}" />
>         </t:column>
>               ...
>        </t:dataTable>
>
> My converter works, but I don't know how to change the style of the
> input-component. The following code does not work, it changes me the error
> class of the whole column!
>
>         public Double getAsObject(FacesContext fc, UIComponent uc, String asString)
>                         throws ConverterException {
>
>                 Double doubleValue = null;
>                 try {
>                                   ..... //convert the string to a double
>                 } catch (Exception e) {
>
> ((HtmlInputText)uc).setStyleClass("errorStyle");
>                                        FacesMessage facesMessage = ....
>                         throw new ConverterException(facesMessage);
>                 }
>                 return doubleValue;
>         }
>
> Does anyone know how I can solve this problem?
> Any help is appreciated.
>
> Many Thanks
> Peter
> --
> View this message in context: http://www.nabble.com/t%3AdataTable%3A-how-to-change-css-style-on-single-cells-after-conversion-error--tf4355282.html#a12410633
> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>
>