Как создать файл тега InputText с атрибутом значения и компонентом поддержки?
Я хочу создать файл тега (источника), чтобы получить пользовательский тег в Facelets ( как описано здесь). Я хочу привыкнуть так:
<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>
Эта проблема, это не допускается. Когда я вписываю некоторый текст в поле ввода, я получаю следующую ошибку: Недопустимый синтаксис для операции Set. Как я могу использовать "value" или "inputText.value" в зависимости от того, указан ли тот или другой?
2 ответа
Если предположить, что ваши тесты 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, вероятно, создает новую локальную строку вместо сохранения ссылки на строку, которую вы ей дали.
Попробуй это:
<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>