2011-12-19 67 views
0

工作,我有一個JSF XHTML頁面window.location.href不JSF

<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:a4j="http://richfaces.org/a4j" 
xmlns:rich="http://richfaces.org/rich"> 

<head> 
<f:loadBundle basename="myProperties" var="msg" /> 
</head> 

<f:view> 
<body> 
    <h:form method="post" name="redirectForm" 
     id="redirectId"> 

     <div> 
      <br /> 
      <table width="100%" border="0" align="center"> 
       <tr> 
        <td align="center" width="100%" class="style1">Please wait. 
         The page is getting loaded...</td> 
       </tr> 
      </table> 
      <input type="hidden" name="msg" value="#{myBean.transMsg}" /> 
      <input type="hidden" id="pgURLId" name="pgurl" value="#{myBean.pgURL}" /> 

     </div> 
    </h:form> 

    <script type="text/javascript"> 
    /* <![CDATA[ */ 

    function forward() {  
     var pgUrlId=getElementForAnId('pgURLId'); 
     var pgValue=document.getElementById(pgUrlId).value; 
     var formId=getElementForAnId('redirectId'); 
     document.getElementById(formId).action = pgValue; 
     document.getElementById(formId).submit(); 
     window.location.href = pgValue; 
    } 
    forward(); 


    function getElementForAnId(str) // To removing appending content 
    { 
    var ret; 
    var inputs = document.getElementsByTagName('*'); 
    for (var i = 0; i < inputs.length; i++) { 
    if (inputs[i].id.indexOf(str) != -1) { 
    ret = inputs[i].id; 
    } 
    } 
    return ret; 
    } 

    /* ]]> */ 

</script> 

</body> 
</f:view> 
</html> 

我使用的Liferay門戶 - 6.0.6和jboss-5.1.0

我能擊中那個pgurl但味精沒有被張貼。

當我在我的日誌中看到它時,收到的消息爲空。

回答

-1

你的代碼看起來非常混亂,雖然直到有人告訴你,你不知道如何修復東西。

所以首先,你知道你的服務器端代碼應該是什麼樣子,所以我將專注於客戶端代碼。

不要模仿懶惰的程序員,你最終會爲自己做更多的工作,比如果你事先付出額外的努力。堅持最嚴格的符合標準的代碼(產生最少量的主觀性)。保持你的腳本元素只作爲頭元素的子元素,永遠不要將它們粘在body元素中。身體元素中的腳本元素不僅鼓勵真正糟糕的編碼實踐,而且會嚴重阻礙您長期實現目標的能力。

一個說明,只有IE6和更老的不支持應用程序/ javascript這是正確的媒體類型/ MIME的JavaScript文件和腳本一般然而在這一點上,根本沒有意義支持IE6,因爲它的市場份額低於1%,大多數IE6用戶代理是垃圾郵件發送者,甚至是微軟自己運行的機器人(誰知道什麼原因)。

下面是如何顯示XHTML代碼的模板。一般情況下,在實時環境中,您應該將腳本元素限制爲兩個,一個僅用於匿名的onload函數(它允許您爲onload事件執行多個事件,而該事件只允許針對XHTML應用程序存在一次)以及任何全局變量(如果需要的話)(變量定義在函數之外),第一個腳本元素應包含大部分函數。您可以使用服務器端腳本來合併多個JavaScript文件,以將其作爲批量函數腳本文件的單個文件提供。

這裏是XHTML模板,適應你的JavaScript代碼,並確保利用JavaScript錯誤控制檯的瀏覽器(引擎=瀏覽器:壁虎=火狐,KHMTL =的Konqueror(KDE/Linux的),普雷斯托=歌劇,三叉戟= Internet Explorer,WebKit = Chrome/Safari(WebKit是這兩個瀏覽器的一個分支,WebKit本身就是來自KHTML的分支)

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<title>Example XHTML Application</title> 
<script type="application/javascript"> 
//<![CDATA[ 
a_function() 
{ 
//stuff 
} 
window.onload = function() 
{ 
//function1(); 
//function2(); 
//function3('parameter1','parameter2','parameter3'); 
alert(window.location.href); 
} 
//]]> 
</script> 
</head> 

<body> 

</body> 
</html>