Създаване на потребителски етикети: обвързване по избор

Срещам проблем с персонализиран етикет.

Ето го проблема. Създадох маркер, който се използва в моите JSF страници:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core">

    ... some stuff ...

<h:inputText id="#{id}" value="#{value}" binding="#{binding}" label="#{label}"/>

    ... some stuff ...
</ui:composition>

Искам да използвам този компонент в моите страници по следния начин (моят компонент се казва gp:inputText):

<gp:inputText value="#{myBean.myValue}" id="myId" label="myLabel" binding="#{myBean.myUiComponent}" />

Но също така искам да използвам същия компонент, но без да обвързвам inputText. Как мога да направя това? Опитах се просто да използвам моя компонент, без да посочвам обвързването, но не работи. Изглежда, че обвързващата стойност не може да бъде нула като стойността на етикета например.

Благодаря за помощта !


person jtetrel    schedule 07.11.2013    source източник
comment
Използвайте композитен компонент. Там можете да картографирате обвързващия атрибут по естествен начин.   -  person Adrian Mitev    schedule 08.11.2013
comment
Не разбирам как може да ми помогне съставният компонент. Проблемът е, че не разбирам каква може да бъде стойността по подразбиране за обвързващия атрибут. JSF не работи например, ако напиша binding= на inputText. Следователно мога да напиша label= и може да работи... Моля, можете ли да ми обясните малко повече как мога да накарам това да работи с композитен компонент?   -  person jtetrel    schedule 08.11.2013
comment
Атрибутът за свързване не може да има стойност по подразбиране. Вие свързвате компонента към свойство на bean, като използвате атрибута за свързване.   -  person Adrian Mitev    schedule 08.11.2013


Отговори (1)


Не е възможно да се дефинира обвързващ атрибут без правилна стойност.

Можете обаче да избегнете дефинирането на обвързващ атрибут, когато той е нулев, като това:

<h:inputText id="#{id}" value="#{value}" label="#{label}">
    <c:if test="#{binding != null}" >
        <f:attribute name="binding" value="#{binding}" />
    </c:if>
</h:inputText>
person sgraton    schedule 08.11.2013
comment
Благодаря. Само малка модификация: ‹c:if test=#{binding != ''}› и работи. - person jtetrel; 08.11.2013
comment
По-скоро използвайте #{not empty binding}. - person BalusC; 08.11.2013
comment
добре ли работи начинът за използване на обвързване с call/callback component update с помощта на ajax например? дайте ми съвет моля - person cbhogf; 17.10.2016