h:commandLink渲染工作禁用不起作用

时间:2014-01-30 05:27:31

标签: jsf-2

我有一个页面,我正在使用p dataTable显示一个主表面,其值来自会话范围bean。表中的一列是commmandLink。我在表中的p:列下有一个h:commandLink。我需要根据具体情况渲染h:commandLink。我需要在另一个条件下禁用/启用h:commandLink。为渲染h:commandLink而编写的逻辑正常工作,但禁用它的逻辑不起作用。 h:commandLink有一个嵌套的outputText和graphicImage。即使是默认的禁用=“真实”也不起作用。当我点击为commandLink显示的图像时,我看到我在commandLink onClick上使用javascript显示的对话框。

<p:dataTable value="#{myBean.items}" 
                id="pdatatableid"
                var="oneItem"
                rowIndexVar="rowIdxVar"
                rows="#{myBean.displayRows}" 
                cellspacing="0" 
                width="500px"
                emptyMessage="Item(s) requested cannot be found" 
                lazy="true"
                first="#{myBean.firstRow}" 
                paginator="true" 
                paginatorPosition="top">

        <p:columns value="#{myBean.headerList}" var="colHeader"
                    columnIndexVar="colIdx" sortBy="#{oneItem[colHeader.attribute]}" headerText="#{colHeader.label}" rendered="#{not empty myBean.headerList}">

            <h:commandLink action="#{myBean.performLinkAction(colHeader)}"
                        rendered="#{colHeader.commandLink &amp;&amp; colHeader.linkAction != 'removeWorkItemEscalation' &amp;&amp; colHeader.linkAction == 'orderCancellation' &amp;&amp; oneItem.cancelOrder}"
                        disabled="true" immediate="true"
                        onclick="#{rich:component('cancellationDlg')}.show();return false;">
                        <h:outputText rendered="#{(colHeader.valueImage) == null}"
                            value="#{myBean.getColumnValue(colHeader,colIdx)}" />
                        <h:graphicImage rendered="#{(colHeader.valueImage) != null}"
                            value="#{colHeader.valueImage}"
                            alt="#{myBean.getColumnValue(colHeader,colIdx) ? 'Yes':'No'}"
                            title="Cancel Quote" />
            </h:commandLink>                    
        </p:columns>
</p:dataTable>
    public boolean getCancelOrder(){
        boolean cancelOrder = false;
        if(!StringUtils.isEmpty(getOrderVO().getRealm())
                && "NETWORK".equalsIgnoreCase(getOrderVO().getRealm())){
            cancelOrder = true;
        }

        return cancelOrder;
    }

above is the bean method used for rendered attribute which is working.

Similar implementation and even defaulting disabled to "true" does not work.

4 个答案:

答案 0 :(得分:4)

查看生成的HTML。设置disabled = true将产生span-Tag。

  
    

如果指定了“disabled”属性,则不要呈现HTML“a”锚元素或其“href”属性。相反,渲染一个“span”元素。

  

https://javaserverfaces.java.net/nonav/docs/2.0/pdldocs/facelets/h/commandLink.html

如果有一个属性onClick,这将产生客户端行为。

答案 1 :(得分:2)

我有同样的问题,通过删除渲染的h:commandLink解决了 并只留下h:graphicImage。

<h:commandLink> 
    <h:graphicImage rendered="#{varDataTable.atribute}"/> 
</ h: commandLink>

答案 2 :(得分:2)

使用 Bootstrap:

我遇到了同样的问题,并通过在EL条件下添加禁用来解决它。

<h:commandLink class="#{empty Backing.list?'disabled':''}" action="#{Backing.next}">
                        <i class="fa fa-calendar"></i>Label
                        <f:ajax render="@form" />
                    </h:commandLink>

答案 3 :(得分:0)

使用commandButton代替commandLink解决了这个问题。在搜索jsf commandButton和commandLink之间的差异时,我发现它们分别生成不同类型的HTML元素输入和href a,而commandLink使用javascript进行提交。写在命令onButton上的javascript正在按预期工作,并且在禁用按钮时不会被调用。在commandLink上,即使按钮被禁用,也会调用javascript。