ResponseWriter.writeAttribute()中'name'和'property'参数之间的区别

时间:2014-09-26 07:16:01

标签: jsf-2

ResponseWriter.writeAttribute(String name, Object value, String property)nameproperty之间的区别是什么?另外,如果propertynull,该怎么办?

1 个答案:

答案 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状态下未知时才会生效。