Как создать файл тега InputText с атрибутом значения и компонентом поддержки? - PullRequest
0 голосов
/ 17 июля 2009

Я хочу создать файл тега (источника), чтобы получить пользовательский тег в фасетах (, как описано здесь ). Я хочу, чтобы это привыкло так:

<my:inputText value="#{myBean.someString}"/>
<my:inputText inputText="#{myBean.inputText}"/>

В первом случае его можно привязать к простому свойству String внутри моего компонента. Во втором случае myBean должен предоставить базовый компонент для поля ввода. Этот компонент содержит не только значение, но и такие свойства, как maxlength, disabled, обязательный и т. Д.

Файл тегов выглядит следующим образом (упрощенно):

<?xml version="1.0" encoding="UTF-8"?>
<ui:fragment
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:h="http://java.sun.com/jsf/html">

<c:set var="someValue" value="#{value}"/>

<c:if test="#{empty value and not empty inputText}">
    <c:set var="someValue" value="#{inputText.value}"/>
</c:if>

    <h:inputText value="#{someValue}"
    disabled="#{disabled or inputText.disabled}"/>
</ui:fragment>

Эта проблема, это не разрешено. Когда я вписываю некоторый текст в поле ввода, я получаю следующую ошибку: Недопустимый синтаксис для операции набора . Как я могу использовать «value» или «inputText.value» в зависимости от того, указан тот или другой?

Ответы [ 2 ]

1 голос
/ 20 июля 2009

Если ваши тесты if выполняют то, что вы от них хотите (я обычно их использую. Вероятно, должно показаться чище, чем просто использование визуализированного свойства), это, вероятно, сработает ...

<?xml version="1.0" encoding="UTF-8"?>
<ui:fragment
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:h="http://java.sun.com/jsf/html">

<c:if test="#{empty value and not empty inputText}">
   <h:inputText value="#{inputText.someValue}"
                disabled="#{disabled or inputText.disabled}"/>
</c:if>
<c:if test="#{not empty value and empty inputText}">
   <h:inputText value="#{value}" disabled="#{disabled}"/>
</c:if>
</ui:fragment>

Использование SomeValue, вероятно, создает новую локальную строку вместо сохранения ссылки на строку, которую вы ей дали.

0 голосов
/ 18 июля 2009

Попробуйте это:

<my:inputText inputText="#{bean.value}" disabled="#{bean.disabled}"/>

<?xml version="1.0" encoding="UTF-8"?>
<ui:fragment
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:h="http://java.sun.com/jsf/html">

<c:set var="someValue" value="#{value}"/>

<c:if test="#{empty value and not empty inputText}">
        <c:set var="someValue" value="#{inputText}"/>
</c:if>

    <h:inputText value="#{someValue}" disabled="#{disabled}"/>
</ui:fragment>
...