gpt4 book ai didi

java - 当我尝试使用我的 jsf 自定义标签时,为什么会出现错误 "prefix [..] is not defined"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:29 27 4
gpt4 key购买 nike

我创建了一个 jsf 自定义标签(我不确定它是否正确,我很容易漏​​掉一些东西,所以我在下面附上了代码)。

现在我尝试使用这个标签,但出现错误:

error on line 28 at column 49: Namespace prefix gc on ganttchart is not defined

所以,这是 xhtml 页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:gc="http://myganttchart.org">

<body>
<ui:composition template="/masterpage.xhtml">
<ui:define name="title">Gantt chart test</ui:define>
<ui:define name="content">
<f:view>
<gc:ganttchart width="300" height="100" rendered="true"/>
...
</f:view>
</ui:define>
</ui:composition>
</body>
</html>

这里是 tld 文件(位于 WEB-INF/ 中):

<taglib xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">

<tlib-version>
1.0
</tlib-version>
<short-name>
oext
</short-name>
<uri>
http://myganttchart.org
</uri>

<tag>
<name>ganttchart</name>
<tag-class>usermanagement.support.ganttchart.GanttChartTag</tag-class>
<body-content>empty</body-content>

<attribute>
<name>binding</name>
<deferred-value>
<type>javax.faces.component.UIComponent</type>
</deferred-value>
</attribute>

...
</tag>
</tablib>

这是标签类代码的一部分:

public class GanttChartTag extends UIComponentELTag {

private ValueExpression width;
private ValueExpression height;
private ValueExpression styleClass;

public String getComponentType () {
return "org.myganttchart";
}

public String getRendererType () {
return null;
}
...
}

来自 faces-config 的对应 block :

<component>
<component-type>org.myganttchart</component-type>
<component-class>usermanagement.support.ganttchart.UIGanttChart</component-class>
</component>

最后一部分 UIGanttChart:

public class UIGanttChart extends UIOutput {

public UIGanttChart() {
setRendererType (null);
}

//some test code
public void encodeBegin(FacesContext context) throws IOException {
ResponseWriter writer = context.getResponseWriter ();
writer.startElement("img", this);
writer.writeAttribute("src", "no-img", "source");
writer.writeAttribute("width", getAttributes ().get ("width"), "width");
writer.writeAttribute("height", getAttributes ().get ("height"), "height");
writer.writeAttribute("class", ".someclass", "styleClass");
writer.endElement("img");
}

}

那么,我错过了什么?欢迎任何关于如何调试或问题出在哪里的想法。

最佳答案

您需要定义新的标签库 a-la-facelets。

在/WEB-INF 下创建名为“gc.taglib.xml”的文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://org.myganttchart/gc</namespace>
<tag>
<tag-name>gantchart</tag-name>
<component>
<component-type>org.myganttchart</component-type>
</component>
</tag>
</facelet-taglib>

并保留您对 faces-config.xml 所做的操作。

关于java - 当我尝试使用我的 jsf 自定义标签时,为什么会出现错误 "prefix [..] is not defined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2714508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com