Jsf 如何创建具有值属性和支持bean的InputText标记文件?

Jsf 如何创建具有值属性和支持bean的InputText标记文件?,jsf,facelets,el,tagfile,Jsf,Facelets,El,Tagfile,我想创建一个标记(源)文件,以便在facelets()中获得自定义标记。我希望它能像这样使用: <my:inputText value="#{myBean.someString}"/> <my:inputText inputText="#{myBean.inputText}"/> 在第一种情况下,可以将它绑定到我的bean中的一个简单字符串属性。在第二种情况下,myBean应该为输入字段提供一个支持bean。该支持bean不仅包含值,还包含诸如maxlength、d

我想创建一个标记(源)文件,以便在facelets()中获得自定义标记。我希望它能像这样使用:

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

在第一种情况下,可以将它绑定到我的bean中的一个简单字符串属性。在第二种情况下,myBean应该为输入字段提供一个支持bean。该支持bean不仅包含值,还包含诸如maxlength、disabled、mandatory等属性

标记文件如下所示(简化):


这个问题是,这是不允许的。当我在输入字段中输入一些文本时,会出现以下错误:Set操作的语法非法。如何使用“value”或“inputText.value”,取决于是否指定了其中一个?

尝试以下方法:

<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>

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

我看不出有什么区别,只看到“disabled”属性。你能给我解释一下,为什么这会有帮助吗?我没有使用inputText.value和inputText.disabled,这两个都不适用于facelet。(我想!)
<?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>