如果链接已被使用(单击),我们需要更改链接颜色。 我们将 h:commandLink 与 action 方法一起使用。下面是一段代码。
.xhtml 文件 -
<h:commandLink styleClass="changeLinkColor" action="#{bean.actionMethod}">
<span><h:outputText value="UserName"/></span>
</h:commandLink>
.CSS 文件 -
.changeLinkColor
{
color:#0000FF;
text-decoration:none;
}
.changeLinkColor a:link
{
color:blue;
text-decoration:none;
}
.changeLinkColor a:visited
{
color: black;
}
除了 a:visited 之外,这里所有的样式都正常工作。 但是,如果我们将 h:commandLink 更改为 h:outputLink,它就可以正常工作。但是后者没有 Action 方法属性。因此不能使用它。
如果您有任何解决方法来使用 h:commandLink 标签更改链接颜色,请分享。
最佳答案
当浏览器看到链接地址(href)被访问时,将访问颜色变为已访问。
但是 commandLink 会生成带有 onclick 的链接,它会返回 false 以禁用 href 行为,例如:
<a onclick="return submitForm(x);" href="#">xx</a>
所以这不是 JSF 问题,而是 html 问题。
我们的解决方案是:
- 创建一个不可见的 iframe
- 将 href 改写为魔法路径
- 重写onclick函数,让iframe先走魔道。
使用 jquery 示例:
$(document).ready(function() {
$("#linkDiv a").each(function(idx, elem)) {
elem.href = '/dummy_' + elem.innerHTML + '.xhtml';
var oldfunc = elem.onclick;
$(elem).click(function(){
invisibleFrame.location.href = elem.href;
return oldfunc();
});
});
});
关于css - 一个 :visited not working with h:commandLink in JSF 1. 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16088008/