我正在编写一组自定义PrimeFaces组件,使用PrimeFaces 5.0并在JBoss EAP 6.2中运行。
我首先要构建一个自定义组件来呈现标准的html <input/>
;标签作为概念的初始证明。
我的问题的简短版本:
将我的名称空间定义为st,标记<st:input/>
不会呈现<input/>
标记... <st:input/> </st:input>
。
长版:
第二个项目是自定义组件的展示。
2.1:
<faces-config
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 http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd"
version="2.1">
<name>myfacestest</name>
</faces-config>
2.2在myfacestest.taglib.xml中我定义了我的输入标记:
<?xml version="1.0"?>
<facelet-taglib version="2.0"
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 http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
id="st">
<namespace>http://org.myfacestest.faces/ui</namespace>
<tag>
<tag-name>input</tag-name>
<component>
<component-type>org.myfacestest.faces.Input</component-type>
<renderer-type>org.myfacestest.faces.InputRenderer</renderer-type>
</component>
</tag>
</facelet-taglib>
2.3在Input.java(我的自定义组件)中,我执行以下操作:
@FacesComponent(value = Input.COMPONENT_TYPE)
@ResourceDependencies(
{@ResourceDependency(library = "primefaces", name = "jquery/jquery.js"),
@ResourceDependency(library = "primefaces", name = "primefaces.js"),
@ResourceDependency(library = "myfacestest", name = "input.js"),
@ResourceDependency(library = "myfacestest/css", name = "input.css")})
public class Input extends UIInput implements Widget {
public static final String COMPONENT_TYPE = "org.myfacestest.faces.Input";
public static final String COMPONENT_FAMILY = "org.myfacestest.faces.components";
public String getFamily() {
return COMPONENT_FAMILY;
}
...
2.4此组件的渲染器包含以下内容:
@FacesRenderer(componentFamily = Input.COMPONENT_FAMILY, rendererType = InputRenderer.RENDERER_TYPE)
public class InputRenderer extends CoreRenderer {
public static final String RENDERER_TYPE = "org.myfacestest.faces.components.InputRenderer";
@Override
public void decode(FacesContext context, UIComponent component) {
String submittedValue = (String) context.getExternalContext().getRequestParameterMap().get(component.getClientId(context));
((Input) component).setSubmittedValue(submittedValue);
}
@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
this.encodeMarkup(context, (Input) component);
this.encodeScript(context, (Input) component);
}
private void encodeMarkup(FacesContext context, Input input) throws IOException {
ResponseWriter writer = context.getResponseWriter();
//Object value = input.getValue() != null ? input.getValue() : 0;
writer.startElement("input", input);
writer.writeAttribute("id", input.getClientId(), null);
writer.writeAttribute("name", input.getClientId(), null);
writer.endElement("input");
}
private void encodeScript(FacesContext context, Input component) throws IOException {
String clientId = component.getClientId();
String widgetVar = component.resolveWidgetVar();
WidgetBuilder wb = getWidgetBuilder(context);
wb.initWithDomReady("Input", widgetVar, clientId);
wb.finish();
}
...
2.5由于这个jar作为模块部署在我的应用服务器上,因此我在jboss中的以下文件夹中部署了my-faces-test-0.1.jar(通过Maven POM命名):
模块/系统/层/基层/组织/ myfacestest /面/主
我的module.xml中包含以下内容:
<module xmlns="urn:jboss:module:1.1" name="org.myfacestest.faces">
<resources>
<resource-root path="my-faces-test-0.1.jar"/>
</resources>
<dependencies>
</dependencies>
</module>
3.1自从我将其部署到我的jboss app服务器后,我在jboss-deployment-structure.xml中添加了以下内容:
<module name="org.myfacestest.faces"/>
3.2我有一个使用标签的xhtml如下:
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:st="http://org.myfacestest.faces/ui"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
3.3在同一文件中,&lt; h:body&gt;内和&lt; h:form&gt;元素:
<st:input/>
鉴于此设置,为什么自定义组件不会呈现?我的jboss日志中没有任何内容,即使日志记录级别设置为debug。
答案 0 :(得分:0)
您可以通过将export true标记添加到jboss-deployment-structure.xml
来公开JARmy-faces-test-0.1.jar
中的XML配置。
<module name="org.myfacestest.faces" export="true" meta-inf="export"/>
这会将依赖关系暴露给EAR / WAR