如何使用value属性和辅助bean创建InputText标记文件?

时间:2009-07-17 14:01:45

标签: jsf facelets el tagfile

我想创建一个标记(源)文件,以在facelets(as described here)中获取自定义标记。我想让它像这样使用:

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

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

标记文件看起来像这样(简化):

<?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 个答案:

答案 0 :(得分: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可能会生成一个新的本地字符串,而不是维护对您提供的字符串的引用。

答案 1 :(得分: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>