0

我有这个“h:outputLink”,当我单击 JSF 表行时,我用它来打开一个新页面:

<h:outputLink id="lnkHidden" value="page.html"  style="text-decoration:none; color:white;">
    <f:param name="id" value="#{item.value}" />
</h:outputLink>

单击一行时,我使用此 JavaScript 打开一个新页面:

// For clicking on a row and opening new page
function addOnclickToDatatableRows() {
    //gets all the generated rows in the html table
    var trs = document.getElementById('form:dataTable').getElementsByTagName('tbody')[0]
    .getElementsByTagName('tr');
    //on every row, add onclick function (this is what you're looking for)
    for (var i = 0; trs.length > i; i++) {
        var cells = trs[i].cells;                    
        for(var j=1; j < cells.length; j++){
            cells[j].onclick = new Function("rowOnclick(this.parentElement)");
        }                    
    }
}

function rowOnclick(tr) {
    var elements = tr.cells[0].childNodes;
    for(var i = 0; elements.length > i; i++) {                           
        if ((typeof elements[i].id != "undefined") && (elements[i].id.indexOf("lnkHidden") > -1)) {
            location.href=elements[i].href;
            break;
        }
    }                
    return false;
}

我以这种方式更新了代码:

<h:commandLink id="lnkHidden" style="text-decoration:none; color:white;"
               actionListener="#{bean.pageRedirect}">
    <f:setPropertyActionListener target="#{bean.sessionValue}" value="#{item.value}" />
</h:commandLink>

托管豆:

public void setSessionValue(Object value)
    {

       ...........

    }

public String pageRedirect()
    {

        return "/DatacenterProfile.html";
    }

事实证明,JavaScript 没有正常工作,因为我更改为h:commandLink. 你能帮我解决这个问题吗?

附言

我测试使用h:commandButton

<h:commandButton id="lnkHidden" style="text-decoration:none; color:white; display:none"
               action="#{bean.pageRedirect}">
    <f:setPropertyActionListener target="#{bean.sessionValue}" value="#{item.value}" />
</h:commandButton>

当我点击表格时,我总是被重定向到页面

http://<ip>:8080/app/undefined

我想问题出在 JavaScript 代码中。任何想法如何解决这一问题?

4

2 回答 2

1

我不知道我是否解决了你的问题。但是,如果您尝试在单击 时进行重定向commandLink,我认为您的问题是,您不能使用该属性进行重定向actionListener,而是应该使用该action属性,否则 的返回值pageRedirect将无效。

查看oracle 文档以获得进一步的解释。

于 2013-04-07T14:22:10.193 回答
1

您应该调试您的 javascript,尝试显示href的值,看看它是否是您想要的:

function rowOnclick(tr) {
    var elements = tr.cells[0].childNodes;
    for(var i = 0; elements.length > i; i++) {                           
        if ((typeof elements[i].id != "undefined") && (elements[i].id.indexOf("lnkHidden") > -1)) {

            alert(elements[i].href);

            location.href=elements[i].href;
            break;
        }
    }                
    return false;
}

问候,

于 2013-04-08T07:15:57.393 回答