我有一个页面,我正在使用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 && colHeader.linkAction != 'removeWorkItemEscalation' && colHeader.linkAction == 'orderCancellation' && 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.
答案 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。