0

我想创建一个标签(源)文件来获取 facelets 中的自定义标签(如此处所述)。我希望它像这样使用:

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

在第一种情况下,可以将它绑定到我的 bean 中的一个简单的 String 属性。在第二种情况下,myBean 应该为输入字段提供一个支持 bean。该支持 bean 不仅包含值,还包含 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>

这个问题是,这是不允许的。当我在输入字段中输入一些文本时,我收到以下错误:Illegal Syntax for Set Operation。如何根据是否指定一个或另一个来使用“value”或“inputText.value”?

4

2 回答 2

1

假设您的 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 可能会创建一个新的本地字符串,而不是维护对您给它的字符串的引用。

于 2009-07-20T14:16:29.153 回答
0

尝试这个:

<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>
于 2009-07-18T06:27:55.883 回答