【问题标题】:Need help on finishing the implementation of custom component with composite在使用复合材料完成自定义组件的实现方面需要帮助
【发布时间】:2012-10-07 23:48:49
【问题描述】:

我正在使用复合材料实现自定义组件。 我的复合组件的源代码如下:

<cc:interface componentType="selectOneRadio"
              xmlns="http://www.w3.org/1999/xhtml"   
              xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:attribute name="direction" default="next" />
</cc:interface>

如你所见,我不使用implementation 部分,但如果我必须使用它也没问题。

然后,我用 Java 渲染它的内容如下:

public void encodeChildren(FacesContext context) throws IOException {
   ...
}

此控件将根据名称为“direction”的属性的值生成一个整数值。如果它的值为“next”,则生成的值为该月的当前日期加 1,如果它的值为“back”,则生成的值为该月的当前日期减 1。

我想知道当用户单击我在自定义组件后添加的&lt;h:commandButton /&gt; 时,如何将生成的值传递给支持 bean?

我需要使用&lt;f:ajax /&gt; 或类似的东西吗?

另外一个问题,我可以同时使用 Java 和 &lt;cc:implementation /&gt; 渲染我的复合组件(混合)吗?

谢谢。

【问题讨论】:

    标签: jsf-2 custom-component composite-component


    【解决方案1】:

    您需要在decode()方法中执行表单提交处理工作。

    @Override
    public void decode(FacesContext context) {
        // ...
    }
    

    您可以通过继承的getValueExpression() 方法将属性作为ValueExpression 获取。您可以使用ValueExpression#setValue() 执行“设置”操作。例如

    <my:composite ... value="#{bean.foo}" />
    

    ValueExpression value = getValueExpression("value");
    value.setValue(context.getElContext(), newValue);
    

    将在#{bean.foo}代表的属性上相应地设置newValue

    【讨论】:

    • 嗨@BalusC,根据您上面的建议,我可以将生成的值传递给后备控制器,谢谢。但是对于我上面的问题,我过于简化了我的真实情况,然后我需要对你的答案进行一些补充。我的真实情况是here,我需要(在解码方法内部)获取所选值:&lt;selectItem /&gt;。每个 &lt;selectItem /&gt; 都呈现为一个单选按钮 (&lt;input type="radio" ...)。
    • 在解码内部,你应该从请求参数映射中获取提交的值。例如。 externalContext.getRequestParameterMap().get(clientId).
    • 非常感谢@BalusC,现在它工作得很好;)
    • 不客气 :) 我忘了补充,模型值实际上需要在 processUpdates() 方法覆盖中更新。这只会在验证通过时调用。
    • 那么,我是否必须将:ValueExpression value = getValueExpression("value"); value.setValue(context.getElContext(), newValue);decode(...) 方法移动到 processUpdates() 方法?我现在拥有它,它可以工作,但我不知道搬到那里是否更可取?
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多