相关疑难解决方法(0)

35
推荐指数
4
解决办法
2万
查看次数

为什么我应该使用createComponent而不是自己创建实例?

这更像是一个概念性问题.

我必须处理必须创建动态的功能h:dataTable.每当我创建一个组件时,我都做了类似的事情:

DataTable table = (DataTable) FacesContext.getCurrentInstance().getApplication()
                      .createComponent(DataTable.COMPONENT_TYPE);
Run Code Online (Sandbox Code Playgroud)

用它FacesContext来为我创造一切.

但是,我可以简单地这样做:

DataTable table = new DataTable();
Run Code Online (Sandbox Code Playgroud)

我在第一种方式中做到这一点的原因是我在开发时阅读的所有教程和材料都是这样做的,但我从来没有得到明确答案的原因.

有没有一个实际的原因,为什么第一个优于第二个?

jsf-2

7
推荐指数
1
解决办法
709
查看次数

如何确定内置组件的渲染器

我想为内置组件创建一个自定义渲染器:<h:selectOneRadio /> 我想知道,如何确定内置组件的渲染器以创建自己的渲染器并从中扩展?

我想知道一种获取它的机制,以便我可以应用它来确定任何其他内置组件的渲染器而不仅仅是for <h:selectOneRadio />.

谢谢

jsf-2

3
推荐指数
1
解决办法
1336
查看次数

在@FacesComponent中@Inject-ed值为null

我的印象是CDI没有使用具有@javax.faces.component.FacesComponent.的类.这是真的?

这是我的例子,这不起作用.将MyInjectableClass用于在在注射是没有问题的代码等穴位,所以它必须是有关@FacesComponent注释,我认为.

我要注入的课程:

@Named
@Stateful
public class MyInjectableClass implements Serializable {

    private static final long serialVersionUID = 4556482219775071397L;
}
Run Code Online (Sandbox Code Playgroud)

使用该类的组件;

@FacesComponent(value = "mycomponents.mytag")
public class MyComponent extends UIComponentBase implements Serializable {

    private static final long serialVersionUID = -5656806814384095309L;

    @Inject
    protected MyInjectableClass injectedInstance;


    @Override
    public void encodeBegin(FacesContext context) throws IOException {
        /* injectedInstance is null here */
    }
}
Run Code Online (Sandbox Code Playgroud)

jsf uicomponents java-ee cdi

3
推荐指数
1
解决办法
2775
查看次数

如何使用自定义渲染器渲染复合组件?

我想知道如何通过Java渲染复合组件,我的意思是:

<myowntags:selectOneRadio>
  <f:selectItem itemValue="value0" itemLabel="This is the value 0" />
  <f:selectItem itemValue="value1" itemLabel="This is the value 1" />
  <f:selectItem itemValue="value2" itemLabel="This is the value 2" />
</myowntags:selectOneRadio>
Run Code Online (Sandbox Code Playgroud)

要么

<myowntags:selectOneRadio>
  <f:selectItems  value="#{controller.items}"  />
</myowntags:selectOneRadio>
Run Code Online (Sandbox Code Playgroud)

我想创建一个Java类来呈现它.

我知道如何在不使用复合的情况下渲染自定义组件,但是因为要渲染组件,我必须在块上指定一些值:

<renderer>
    <component-family>javax.faces.SelectBoolean</component-family>
    <renderer-type>javax.faces.Checkbox</renderer-type>
    <renderer-class>com.myapp.CustomCheckboxRenderer</renderer-class>
</renderer>
Run Code Online (Sandbox Code Playgroud)

然后我迷路了,因为我不知道复合组件的render标签内的那些参数的值.

提前谢谢,天使.

renderer composite-component jsf-2

2
推荐指数
1
解决办法
9735
查看次数