【问题标题】:JSF - custom component, problem with expression for attributeJSF - 自定义组件,属性表达式问题
【发布时间】:2010-03-10 18:37:22
【问题描述】:

我想创建具有“标题”属性的自定义组件,该组件可以具有表达式,但出现此错误:

无法将字符串“#{myBean.text}”转换为属性“title”的类“javax.el.ValueExpression”:属性编辑器未向 PropertyEditorManager 注册

原因: org.apache.jasper.JasperException - 无法将字符串“#{myBean.text}”转换为属性“title”的类“javax.el.ValueExpression”:属性编辑器未向 PropertyEditorManager 注册

我的课:

<d:ticker title="#{myBean.text}">
    <f:verbatim>Hello JSF Custom Component</f:verbatim>
</d:ticker>

MyBean.java

public class MyBean {

    private String text = "TITLE!!!!";

    public String getText() {
        return text;
    }
}

TickerTag.java

private ValueExpression title = null;
public void setTitle(ValueExpression title)
{
    this.title = title;
}

protected void setProperties(UIComponent component) {

        super.setProperties(component);
    if (title != null) {
        if (!title.isLiteralText()) {
            component.setValueExpression("title", title);
        } else {
    component.getAttributes().put("title",title.getExpressionString());
    }
}

taglib.tld

<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd">
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>d</short-name>
    <uri>http://jsftutorials.com/</uri>
    <tag>
        <name>ticker</name>
        <tag-class>ticker.TickerTag</tag-class>
        <body-content>JSP</body-content>
        <attribute>
            <name>title</name>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

有人看到问题了吗?

【问题讨论】:

    标签: jsf custom-component


    【解决方案1】:

    我遇到了同样的问题,并且能够通过在我的 taglib.tld 文件中包含 deferred-value 标记来解决它。当组件具有可以使用 EL 表达式设置的属性时,它是必需的。 'type' 标签是 EL 表达式应该计算的类型。

    taglib.tld:

    <tag>
      <name>CustomComponent</name>
      <tag-class>com.test.components.CustomComponent</tag-class>
      <attribute> 
         <name>someAttribute</name> 
         <description>The custom attribute</description>
         <deferred-value>
            <type>java.lang.String</type>
         </deferred-value>
      </attribute> 
    </tag>
    

    【讨论】:

    • &lt;deferred-value&gt; 显示错误。我使用的 doctype&lt;!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"&gt;
    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 2012-08-05
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2013-07-30
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多