Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 替代标准组件默认值/实现_Jsf 2 - Fatal编程技术网

Jsf 2 替代标准组件默认值/实现

Jsf 2 替代标准组件默认值/实现,jsf-2,Jsf 2,我想知道是否有可能覆盖标准JSF组件或Primefaces组件,而不必为它们设置自己的名称空间 假设我有一个常规的组件,我想更改escape属性的默认值。我可以在不必创建自己的组件、覆盖outputText并将放在任何地方的情况下执行此操作吗?我很乐意继续使用 现在我正在renderer类中设置一些值,因为这样更容易,但我不希望这样做。如果您只是覆盖Component类,您仍然可以使用旧的标记: 此示例将值foo bar更改为bar\u foo: page.xhtml: faces-config

我想知道是否有可能覆盖标准JSF组件或Primefaces组件,而不必为它们设置自己的名称空间

假设我有一个常规的
组件,我想更改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;
}