2013-04-07 1 views
0

у меня есть это `ч: outputLink», который я использую, чтобы открыть новую страницу, когда я нажимаю на JSF строке таблицы:Открыть новую страницу, когда я нажимаю на столе 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. Можете ли вы помочь мне решить эту проблему?

PS

Я тестировал использовать 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. Любые идеи, как это исправить?

+0

Если вы хотите открыть ссылку в новой страницы, просто используйте 'target =" _ blank "' в вашем ''. –

ответ

1

Я не знаю, правильно ли я прав. Но если вы пытаетесь перенаправить по клику commandLink, я думаю, ваша проблема в том, что вы не можете перенаправить с использованием свойства actionListener, вместо этого вы должны использовать свойство action, в противном случае возвращаемое значение pageRedirect не повлияет.

Посмотрите на oracle docs для более подробного объяснения.

+0

Я обновил свой пост. –

+0

Как выглядит ваш стол? Есть ли 'commandButton' в каждой строке? Вы пытаетесь перенаправить на местоположение commandButton на клик всей строки таблицы или что вы пытаетесь сделать? Из того, что вы опубликовали, похоже, что вы просто пытаетесь перенаправить статический URL-адрес при нажатии кнопки commandButton. Я действительно не понимаю, что вы собираетесь делать с JS, поскольку вы запрашиваете commandButton. Не могли бы вы объяснить мне это? – user1983983

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; 
} 

С уважением,

Смежные вопросы