Jsf 2 替代标准组件默认值/实现
我想知道是否有可能覆盖标准JSF组件或Primefaces组件,而不必为它们设置自己的名称空间 假设我有一个常规的Jsf 2 替代标准组件默认值/实现,jsf-2,Jsf 2,我想知道是否有可能覆盖标准JSF组件或Primefaces组件,而不必为它们设置自己的名称空间 假设我有一个常规的组件,我想更改escape属性的默认值。我可以在不必创建自己的组件、覆盖outputText并将放在任何地方的情况下执行此操作吗?我很乐意继续使用 现在我正在renderer类中设置一些值,因为这样更容易,但我不希望这样做。如果您只是覆盖Component类,您仍然可以使用旧的标记: 此示例将值foo bar更改为bar\u foo: page.xhtml: faces-config
组件,我想更改escape属性的默认值。我可以在不必创建自己的组件、覆盖outputText并将
放在任何地方的情况下执行此操作吗?我很乐意继续使用
现在我正在renderer类中设置一些值,因为这样更容易,但我不希望这样做。如果您只是覆盖Component类,您仍然可以使用旧的标记: 此示例将值
foo bar
更改为bar\u foo
:
page.xhtml:
faces-config.xml
在自定义组件类中,可以覆盖那些要提供默认值的值的方法。 我用它在
p:calendar
上设置默认值,我也叫setter,因为我的默认值的计算非常昂贵:
@Override
public String getPattern() {
String pattern = (String) getStateHelper().eval(PropertyKeys.pattern);
if(pattern == null) {
pattern = getLocaleBean().getInputDateFormatPattern();
setPattern(pattern);
}
return pattern;
}
我不会调用super.getPattern()
,因为在某些情况下,这会给我一个Primefaces默认值。相反,我直接访问了getstateheloper().eval
如何知道特定组件标记的组件类型和要扩展的类是什么? 如果您使用PrimeFaces组件,那么它非常简单 描述每个组件的
组件类型
和组件类别
如果要查找标准组件,则列表
组件类型
和UIComponent类
将扩展标准标记(对于Mojarra,组件类型
和UIComponent类
也相同) 嗯。。。。从最初的问题:“现在我在renderer类中设置一些值,因为这样比较容易,但我不希望这样做。”您必须扩展renderer类并像此组件一样注册它。我认为asker的意思是“比带有自定义标记(
)的自定义组件更简单”。有了这个解决方案,他仍然可以使用
可以,但是如果OP知道怎么做,我想知道为什么你提到的解决方案没有尝试过。。。让我们等待;-)
package org.example.myComponents;
import javax.faces.component.html.HtmlOutputText;
public class DefaultOutput extends HtmlOutputText {
@Override
public Object getValue() {
Object value = super.getValue();
if(value != null && value instanceof String) {
String val = (String) value;
if(val.equals("foo-bar")) {
value = "BAR_FOO";
setValue(value);
}
}
return value;
}
}
<component>
<component-type>javax.faces.HtmlOutputText</component-type>
<component-class>org.example.myComponents.DefaultOutput</component-class>
</component>
BAR_FOO
@Override
public String getPattern() {
String pattern = (String) getStateHelper().eval(PropertyKeys.pattern);
if(pattern == null) {
pattern = getLocaleBean().getInputDateFormatPattern();
setPattern(pattern);
}
return pattern;
}