ResponseWriter.writeAttribute(String name, Object value, String property)
中name
和property
之间的区别是什么?另外,如果property
是null
,该怎么办?
答案 0 :(得分:4)
name
是您要写出的HTML属性名称。 property
是与该HTML属性关联的JSF标记属性名称(由UIComponent
类上的属性指示)。
通常(以及许多属性的那些),它们是相同的。例如。 <h:inputText value>
最终为<input value>
。
writer.writeAttribute("value", value, "value");
但是,对于例如JSF属性styleClass
这是不同的,因为关联的HTML属性名称class
是Java中的保留关键字,您不能遇到像private String class
这样的属性而不会遇到编译错误。因此,JSF组件使用styleClass
作为标记属性名称和组件属性。所以例如<h:inputText styleClass>
最终为<input class>
。
writer.writeAttribute("class", styleClass, "styleClass");
如果实际在JSF代码和/或property
类中没有此类属性,则可以使用null
指定UIComponent
。例如。通过自定义组件或渲染器自定义HTML5属性。
writer.writeAttribute("autofocus", "true", null);
因此,通常只有当UIComponent#getAttributes()
不包含密钥且UIComponent#getValueExpression()
返回null
并且该属性在JSF状态下未知时才会生效。