【问题标题】:composite component button action issue in jsf2 mojarrajsf2 mojarra中的复合组件按钮操作问题
【发布时间】:2012-11-24 17:48:25
【问题描述】:

尝试使用 jsf2.0 (Mojarra) 开发复合组件,该组件应根据 bean 的列表动态呈现命令按钮。我能够渲染按钮,但没有触发操作。有人可以帮我解决这个问题吗?

下面是代码

<composite:interface>
<composite:attribute name="buttonList" required="true"
type="java.util.List" />
<composite:attribute name="beanName" required="true"
    type="java.lang.Object" />
</composite:interface>
<composite:implementation>

<ui:repeat var="listItem" value="#{cc.attrs.buttonList}">
<h:commandButton value="#{listItem.buttonName}"
action="#{cc.attrs.beanName.listItem.buttonAction}">
</h:commandButton>
</ui:repeat>
</composite:implementation>

这被用作

<utils:buttonGroup buttonList="#{testButtonBean.buttonList}"
beanName="#{testButtonBean}" />

豆子看起来像

public class TestButtonBean {

public List<ButtonPOJO> buttonList = new ArrayList<ButtonPOJO>();
public List<ButtonPOJO> getButtonList() {
  return buttonList;
}   

public void setButtonList(List<ButtonPOJO> buttonList) {
this.buttonList = buttonList;
}

public void preProcess() {
if (null != buttonList && buttonList.size() == 0) {
ButtonPOJO ob1 = new ButtonPOJO("Continue", "next");
ButtonPOJO ob2 = new ButtonPOJO("Back", "prev");
buttonList.add(ob1);
buttonList.add(ob2);
}

}

public String next() {
return "page1";
}

public String prev() {
return "page2";
}
}

【问题讨论】:

    标签: jsf-2 action el composite-component


    【解决方案1】:
    action="#{cc.attrs.beanName.listItem.buttonAction}"
    

    这是不对的。这种语法基本上是在beanName 上查找属性listItem,然后尝试在其上调用文字操作buttonAction()

    如果要将操作方法​​名称指定为来自另一个 bean 属性的字符串,则需要大括号符号 action="#{bean[methodName]}"

    action="#{cc.attrs.beanName[listItem.buttonAction]}"
    

    与具体问题无关,如果上述解决方案仍然失败,那只能说明value="#{cc.attrs.buttonList}"在表单提交请求期间发生了不兼容的变化。您需要确保在回发期间准备的列表与在初始请求期间准备的列表完全相同。另见commandButton/commandLink/ajax action/listener method not invoked or input value not updated 的第 4 点。

    【讨论】:

    • 非常感谢您的快速响应。添加大括号符号后未触发操作,如下所示 action="#{cc.attrs.beanName[listItem.buttonAction]} Aldo 我的 Bean 在视图范围和 buttonList 中是在postconstruct期间构建的。请告知。
    • 我的操作出错了。按照您的建议,它工作正常。此外,这是创建复合组件的正确方法吗?请指教。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2017-10-10
    相关资源
    最近更新 更多