我正在编写一组定制的PrimeFaces组件,使用PrimeFaces5.0,并在JBoss EAP6.2中运行。
<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();
}
...
<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>
<module name="org.myfacestest.faces"/>
<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"
>
<st:input/>
给定这种设置,为什么自定义组件不会呈现?我的jboss日志中没有任何内容,即使日志级别设置为debug。
通过向jboss-deployment-structure.XML添加export true标记,可以在JARmy-faces-test-0.1.JAR
中公开XML配置
这将向EAR/WAR公开依赖关系
问题内容: 我一直在尝试进行AJAX调用,然后在检索到它之后将其添加到我的视图中。 当前代码实际上什么也没有发生。 问题答案: 您的组件名称必须以大写字母开头,因为以小写字母开头的组件会被搜索为默认DOM元素,例如。对于您的组件,情况并非如此。将其设置为大写即可。 根据文档: 当元素类型以字母开头时,它指的是诸如或的内置组件,并导致将字符串 或“ span”传递给。以大写字母开头的类型,例如,编译
JSF的 @ViewScoped不可用,因为它与CDI冲突 提交表单时,JSF动态呈现组件的值变为空 有条件呈现的输入组件不更新值 未调用CommandButton/CommandLink/Ajax操作/Listener方法或未更新输入值 我能想到导致这种行为的几种情况: “rendered”似乎是基于backing bean中的值重新计算的,而不是UI中给出的新值(如果默认为1,则提交时再次为1
Mpx中的自定义组件完全基于小程序原生的自定义组件支持,与此同时,Mpx提供的数据响应和模板增强等一系列增强能力都能在自定义组件中使用。 原生自定义组件的规范详情查看这里 动态组件 Mpx中提供了使用方法类似于 Vue 的动态组件能力,这是一个基于 wx:if 实现的语法。通过对 is 属性进行动态绑定,可以实现在同一个挂载点切换多个组件,前提需要动态切换的组件已经在全局或者组件中完成注册。 使用
PyQt5有丰富的组件,但是肯定满足不了所有开发者的所有需求,PyQt5只提供了基本的组件,像按钮,文本,滑块等。如果你还需要其他的模块,应该尝试自己去自定义一些。 自定义组件使用绘画工具创建,有两个基本方式:根据已有的创建或改进;通过自己绘图创建。 Burning widget 这个组件我们会在Nero,K3B,或者其他CD/DVD烧录软件中见到。 #!/usr/bin/python3 # -*
1. Component 创建自定义组件,接受一个 Object 类型的参数。 定义段 类型 是否必填 描述 最低版本 properties Object Map 否 组件的对外属性,是属性名到属性设置的映射表 data Object 否 组件的内部数据,和 properties 一同用于组件的模板渲染 observers Object 否 组件数据字段监听器,用于监听 properties 和
1. 组件模板和样式 类似于页面,自定义组件拥有自己的 FXML 模板和 FTSS 样式。 1.1 组件模板 组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。 在组件模板中可以提供一个 <slot> 节点,用于承载组件引用时提供的子节点。 代码示例 <!-- 组件模板 --> <view class="wrapper"> <view>这里是组件