如何使用Composite组件中的f:attribute标记为commandButton传递操作字符串

时间:2015-11-06 09:27:08

标签: jsf jsf-2 composite-component

我正在JSF中开发复合组件。我可以通过以下方式将方法名称作为参数传递。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:p="http://primefaces.org/ui"
    xmlns:composite="http://java.sun.com/jsf/composite">

    <!-- INTERFACE -->
    <composite:interface>
        <composite:attribute name="noOfButtons"  type="java.lang.Integer" required="true"/>
        <composite:attribute name="actionOnly"  type="java.lang.Boolean" required="true"/>
        <composite:attribute name="myBean" required="true" type="com.jsf.CRUDBean"/>
        <composite:attribute name="myIcons"  type="java.lang.String" required="true"/>
        <composite:attribute name="myAction" type="java.lang.String" required="true"/>
        <composite:attribute name="myDesc" type="java.lang.String" required="true"/>

    </composite:interface>

    <!-- IMPLEMENTATION -->
<composite:implementation>

            <c:forEach begin="0" end="#{cc.attrs.noOfmys - 1}" var="counter"
                varStatus="status">

                <h:commandButton id="myButton_${counter}"
                    action="#{cc.attrs.myBean[fn:split(cc.attrs.myAction, ',')[status.index]]}"
                    image="#{request.contextPath}/resources/images/#{fn:split(cc.attrs.myIcons, ',')[status.index]}"
                    title="#{fn:split(cc.attrs.myDesc, ',')[status.index]}"
                    style="padding:2px">
                <p:spacer width="5px;" />
            </c:forEach>

</composite:implementation>
</html>

这是完美的。但在我的情况下,我需要以下列方式传递动作。

<c:forEach begin="0" end="#{cc.attrs.noOfmys - 1}" var="counter"
                varStatus="status">

                <h:commandButton id="myButton_${counter}"

                    image="#{request.contextPath}/resources/images/#{fn:split(cc.attrs.myIcons, ',')[status.index]}"
                    title="#{fn:split(cc.attrs.myDesc, ',')[status.index]}"
                    style="padding:2px">
                        <f:attribute name="action" value="#{cc.attrs.myBean[fn:split(cc.attrs.myAction, ',')[status.index]]}" />

            </h:commandButton>

                <p:spacer width="5px;" />
            </c:forEach>

但这不适用于我的应用程序。每当我从页面中单击commandButton时,在用户级别没有任何事情发生。任何帮助都会很感激。

0 个答案:

没有答案