you can use this pattern. Maybe this will help.
> Thanks for the help.
>
> I'll try to explain better. My component doesn't have a Java class, its only
> a tag. It looks like this:
>
>> <ui:composition
>> xmlns:h="
http://java.sun.com/jsf/html"
>> xmlns:ui="
http://java.sun.com/jsf/facelets"
>> >
>> <h:panelGrid
>> columns="2"
>> cellpadding="0"
>> cellspacing="0"
>> >
>> <h:selectBooleanCheckbox
>> id="#{id}"
>> value="#{value}"
>> >
>> <ui:insert />
>> </h:selectBooleanCheckbox>
>> <h:outputLabel
>> value="#{label}"
>> for="#{id}"
>> />
>> </h:panelGrid>
>> </ui:composition>
>
> The id attribute is expecting a value, so every time I use the component I
> have to set it, otherwise I'll get an IllegalArgumentException. If I
> hardcode the id I'll get a duplicated id exception if I have more than 1
> component on the page. If I had a Java class for the component I could
> simply do something like this:
>
>> if(id != null && !id.trim().isEmpty())
>> {
>> component.setId(id);
>> }
>
> How to achieve this on the tag? As I mentioned above f:attribute is not
> working as expected.
>
> Thanks,
> Felipe
>
> 2009/6/19 Fırat KÜÇÜK <
firatkucuk@...>
>>
>> Hi,
>> i didn't understand exactly what you mean. But may be this will helps you.
>>
>> this is my jsf managed bean:
>> -----------------------------
>> package mypackage;
>>
>> public class Sample {
>>
>> private String label = "label";
>> private String value = "value";
>> private int id = 0;
>>
>> public Sample() {
>> }
>>
>> public int getId() {
>> return id;
>> }
>>
>> public void setId(int id) {
>> this.id = id;
>> }
>>
>> public String getLabel() {
>> return label;
>> }
>>
>> public void setLabel(String label) {
>> this.label = label;
>> }
>>
>> public String getValue() {
>> return value;
>> }
>>
>> public void setValue(String value) {
>> this.value = value;
>> }
>>
>> public String submit() {
>> label = value;
>> return null;
>> }
>> }
>>
>>
>> --------------------------------------------------
>> and this is facelets file:
>>
>>
>> <?xml version='1.0' encoding='UTF-8' ?>
>>
>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>> "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>> <html xmlns="
http://www.w3.org/1999/xhtml"
>> xmlns:c="
http://java.sun.com/jstl/core"
>> xmlns:f="
http://java.sun.com/jsf/core"
>> xmlns:ui="
http://java.sun.com/jsf/facelets"
>> xmlns:h="
http://java.sun.com/jsf/html">
>> <body>
>> <h:form>
>> <h:outputLabel value="#{sample.label}" />
>> <h:outputLabel value="#{sample.id}" />
>> <h:messages />
>> <h:inputText label="#{sample.label}" value="#{sample.value}">
>> <f:convertNumber />
>> </h:inputText>
>> <h:commandButton value="submit" action="#{sample.submit}">
>> <c:if test="#{!empty sample.id}">
>> <f:setPropertyActionListener target="#{sample.id}"
>> value="#{sample.value}" />
>> </c:if>
>> </h:commandButton>
>> </h:form>
>> </body>
>> </html>
>>
>>
>>
>>
>>
>>
>>
>> 2009/6/19 Felipe Jaekel <
fkjaekel@...>
>>>
>>> Actually the problem is that f:attribute is not evaluating the the EL. If
>>> I pass the value literally it accepts, but if I pass #{maxlength} it is
>>> trying to set the string "#{maxlength}" as maxleght, so thats why the I get
>>> the ClassCastException.
>>>
>>>> <h:outputLabel value="#{label}" />
>>>> <h:inputText
>>>> label="#{label}"
>>>> value="#{value}"
>>>> >
>>>> <c:if test="#{! empty id}">
>>>> <f:attribute
>>>> name="id"
>>>> value="#{id}"
>>>> />
>>>> </c:if>
>>>> <ui:insert />
>>>> </h:inputText>
>>>
>>> The id attribute is a better exemple of what I'm trying to do. When it's
>>> not set in the custom tag I'd like that it is not set in the h:inputText tag
>>> so that JSF generates the id. Otherwise always when I use the custom tag
>>> I'll have to set the id or write some crazy workaround to generate it so
>>> that I don't get a duplicated id exception.
>>>
>>> Any ideias? Does f:attribute only accepts literals?
>>>
>>> Thanks,
>>> Felipe
>>>
>>> 2009/5/6 joseph j marini <
josephjmarini@...>
>>>>
>>>> Try mapping value to a backing bean #{foo.maxLength}
>>>> in your backing if max length is optional return null, else return
>>>> Integer object with value set. It will get converted automatically.
>>>>
>>>> /Joe
>>>>
>>>>
>>>> --------------------------------------------------
>>>> From: "Zarar Siddiqi" <
zarars@...>
>>>> Sent: Wednesday, May 06, 2009 11:26 AM
>>>> To: <
users@...>
>>>> Subject: Re: Help with custom tag attribute
>>>>
>>>>> There's a difference between saying something is optional by passing
>>>>> in a null, entirely another to pass in a string and expect it to be
>>>>> ignored just because its not an integer.
>>>>>
>>>>> What is the value of maxlength when you pass it in? Is it null or a
>>>>> string?
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Apr 24, 2009 at 1:16 PM, Felipe Jaekel <
fkjaekel@...>
>>>>> wrote:
>>>>>>
>>>>>> I have a custom tag that is composed by a <h:outputLabel /> +
>>>>>> <h:inputText
>>>>>> />. I need the maxlength attribute to be optional. The problem is that
>>>>>> when
>>>>>> I use <f:attribute /> I get a class cast exception.
>>>>>>
>>>>>> Tag:
>>>>>>
>>>>>>> <ui:composition
>>>>>>> xmlns:h="
http://java.sun.com/jsf/html"
>>>>>>> xmlns:c="
http://java.sun.com/jstl/core"
>>>>>>> xmlns:f="
http://java.sun.com/jsf/core"
>>>>>>> xmlns:ui="
http://java.sun.com/jsf/facelets"
>>>>>>> >
>>>>>>> <h:outputLabel value="#{label}" />
>>>>>>> <h:inputText
>>>>>>> label="#{label}"
>>>>>>> value="#{value}"
>>>>>>> >
>>>>>>> <c:if test="#{! empty maxlength}">
>>>>>>> <f:attribute
>>>>>>> name="maxlength"
>>>>>>> value="#{maxlength}"
>>>>>>> />
>>>>>>> </c:if>
>>>>>>> <ui:insert />
>>>>>>> </h:inputText>
>>>>>>> </ui:composition>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Exception:
>>>>>>
>>>>>>> java.lang.ClassCastException: java.lang.String cannot be cast to
>>>>>>> java.lang.Integer
>>>>>>
>>>>>>
>>>>>>
>>>>>> Any ideas?
>>>>>>
>>>>>> Thanks,
>>>>>> Felipe
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail:
users-unsubscribe@...
>>>>> For additional commands, e-mail:
users-help@...
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail:
users-unsubscribe@...
>>>> For additional commands, e-mail:
users-help@...
>>>>
>>>
>>
>>
>>
>> --
>> FIRAT KÜÇÜK
>
>