- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个自定义组件来扩展 PrimeFaces。
我在测试命名空间下有一个名为 textInput 的简单组件,它只调用 PrimeFaces textInput 组件并打印出传递给名为 fieldClass 的属性的值以及传递的任何属性的名称
如果我将 fieldClass 作为字符串传递:
<test:textInput id="foo" fieldClass="field-foo" />
这是结果
fieldClass = field-foo
[com.sun.faces.facelets.MARK_ID, fieldClass]
如果我将 fieldClass 作为表达式传递
<ui:param name="bar" value="field-foo"/>
<test:textInput id="foo" fieldClass="#{bar}" />
fieldClass 消失
fieldClass = NONE
[com.sun.faces.facelets.MARK_ID]
我如何真正掌握传递给组件的属性?
自定义组件使用的类如下:
package test.components;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.FacesRenderer;
import org.primefaces.component.inputtext.*;
@FacesRenderer(
componentFamily=ExtendInputText.COMPONENT_FAMILY,
rendererType=ExtendInputTextRenderer.RENDERER_TYPE
)
public class ExtendInputTextRenderer extends InputTextRenderer {
public static final String RENDERER_TYPE = "com.example.ExtendInputTextRenderer";
@Override
public void encodeEnd(FacesContext context, UIComponent component)
throws java.io.IOException {
ResponseWriter writer = context.getResponseWriter();
Map attrs = component.getAttributes();
String fieldClass = attrs.containsKey("fieldClass") ? (String) attrs.get("fieldClass").toString() : "NONE";
writer.write("fieldClass = " + fieldClass + "<br/>");
writer.write(attrs.keySet().toString() + "<br/>");
super.encodeEnd(context, component);
}
}
package test.components;
import javax.faces.component.FacesComponent;
import org.primefaces.component.inputtext.InputText;
@FacesComponent(ExtendInputText.COMPONENT_TYPE)
public class ExtendInputText extends InputText {
public static final String COMPONENT_FAMILY = "com.example";
public static final String COMPONENT_TYPE = "com.example.ExtendInputText";
@Override
public String getFamily() {
return COMPONENT_FAMILY;
}
@Override
public String getRendererType() {
return ExtendInputTextRenderer.RENDERER_TYPE;
}
}
最佳答案
String fieldClass = attrs.containsKey("fieldClass") ? (String) attrs.get("fieldClass").toString() : "NONE";
你的错误是你在使用 containsKey()
检查属性是否已指定。
这是来自 UIComponent#getAttributes()
javadoc 的摘录:
getAttributes
public abstract java.util.Map<java.lang.String,java.lang.Object> getAttributes()
Return a mutable
Map
representing the attributes (and properties, see below) associated wth thisUIComponent
, keyed by attribute name (which must be aString
). The returned implementation must support all of the standard and optionalMap
methods, plus support the following additional requirements:
- The
Map
implementation must implement thejava.io.Serializable
interface.- Any attempt to add a
null
key or value must throw aNullPointerException
.- Any attempt to add a key that is not a
String
must throw aClassCastException
.- If the attribute name specified as a key matches a property of this
UIComponent
's implementation class, the following methods will have special behavior:
containsKey()
- Returnfalse
.get()
- If the property is readable, call the getter method and return the returned value (wrapping primitive values in their corresponding wrapper classes); otherwise throwIllegalArgumentException
.put()
- If the property is writeable, call the setter method to set the corresponding value (unwrapping primitive values in their corresponding wrapper classes). If the property is not writeable, or an attempt is made to set a property of primitive type tonull
, throwIllegalArgumentException
.remove()
- ThrowIllegalArgumentException
.
请注意,它因此总是返回 false
对于 containsKey
对于组件的属性。那是因为动态属性不存储在属性映射中,而是存储在组件实例本身中。它们仅在调用 get()
时得到解决.
需要将错误的行改成如下:
String fieldClass = (String) attrs.get("fieldClass");
if (fieldClass == null) fieldClass = "NONE";
关于jsf - 访问传递给扩展 PrimeFaces 组件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11204262/
我想为每个条显示不同颜色的 primefaces 条形图。我得到的最接近的就像图像: 我想用不同的颜色来表示这些条,比如绿色代表“准时”,黄色代表“警告”,红色代表“逾期” 我尝试使用 model.s
我对 Primefaces 3 对话框的构造感到困惑。 我在 SO 中看到了具有这种模式的问题。表单在对话框之外。 但另一个问题有这个。 Primef
我尝试使用一个简单的gmap示例开始开发Web应用程序,但是它对我不起作用。 我使用了在网页上找到的示例电影收藏家。我只在template.html文件中包含了这个代码。 我收到此错误: javax.
我正在使用 primefaces 3.0。我有三个文本字段,其中任何一个都是必需的。我如何在 primefaces 中验证这一点。请帮忙..谢谢 最佳答案 通常,当在组件上使用自定义 f:valida
我正在尝试为 primefaces 选择列表创建自定义过滤器。当我按照手册中的说明进行操作时,我在 primefaces 的某处遇到了 TypeError。 我对picklist的定义 我的过滤
我正在努力处理primefaces日历。我需要的是,如果今天是 2011 年 7 月 28 日,我可以限制用户选择 7 月 28 日之前 1 年和 7 月 28 日之后 3 年的日期。 我查看了 pr
有没有办法删除 p:datatable 标题上的全选复选框。 我需要单个行上的复选框,而不是标题上的复选框。 最佳答案 这非常有效: .ui-chkbox.ui-chkbox-all.ui-widge
Primefaces 3.5,Mojarra 2.1.14。这是我的 PF 数据表,它包含一个名为“自动”的不可编辑 bool 列和可编辑的“标签”列:
我想在向导的最后一个选项卡上隐藏后退按钮。 我正在使用素面。它的解决方案是什么? 谢谢 最佳答案 您可以使用 jQuery 在客户端执行此操作: 假设您正在使用展示中的向导:http://www.pr
如果我在 PrimeFaces 数据表中设置属性“scrollable=true”,它可以垂直滚动。但是可以水平滚动这个表格吗? 最佳答案 Primefaces 支持在数据表上水平滚动。只需像这样指定
我有这个代码。在用户选择一行并关闭对话框之后,它将触发rowSelect事件。在我更新为primfaces 3.3(我安装了ver3.2)之前,它工作得很好。我在控制台中没有任何异常,当我调试时,我看
是否存在任何方法来设置 primefaces 的日历组件的年份列表? 最佳答案 对于年份列表,您可以使用 navigator="true" p:calendar 中素面的属性标记和年份范围 c-100
我正在使用 primefaces 3.2。我已经准备好了向导,可以在数据表的同一页面上插入用户信息。向导逐个选项卡获取信息并在确认选项卡上提交。它还将反射(reflect)在数据表的同一页面上。它运行
我有一个 p:treeTable,树内容都在一列中。该树是一个共享组件,因此我的某些页面需要列标题,而有些则不需要。在列标题为空的页面中,它为列标题创建一个空行,这是我不想要的。我确实想要列内容,只是
我使用的是primefaces 3.4,我在 p:overlaypanel 中有一个 p:calendar 。当我选择日期时,覆盖面板关闭(使用 Google Chrome 时)当我使用 Firefo
当我使用日历时,我将“timeOnly”设置为“true”,将“pattern”设置为“HH:mm a”。 当输入时间大于或等于“13:00 pm”时,日历每次获得焦点,都会 自动将时间更改为“23:
我也在尝试获取枚举“CityCodes.java”中定义的城市代码,这是我的枚举类,我的定义如下: public enum Cities { AL("Alabama","1"), AK("Alaska
在 PrimeFaces 展示页面上有一个简单的标题栏,适合实际主题。我的意思是此页面上的“欢迎来到 PrimeFaces 展示”文本:http://www.primefaces.org/showca
是否可以在 Primefaces 中创建垂直菜单栏? 我习惯了像 Ext-JS 这样简单的纯 AJax 框架,但到目前为止我还没有在 PF 中看到这样的组件。 谢谢, 乔 最佳答案 它被称为分层菜单。
是否可以设置 Primefaces 的 ScrollPanel 的滚动速度? Scrollpanel 在“ native ”模式下的滚动速度可以,但在“默认”模式下不行。 我使用的是 Primefac
我是一名优秀的程序员,十分优秀!