iT邦幫忙

0

有關js和jsp問題

大家好:
我在html中有3個button
按下去後會傳一個數值給JS
雖然JS,alert出來的值正確
但是JSP永遠只能存到else那行的值....

<nav class="nav navbar-default"  style="background-color:white;">
        <div class="container-fluid">
            <div class="collapse navbar-collapse" id="myNavbar">
             <ul class="nav navbar-nav navbar-right">
             <li>
<a class="btn btn-secondary dropdown-toggle" role="button" id="dropdownMenuLink" data-toggle="dropdown"> 語系
  </a>
  <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
    <button id="bt1"  class="dropdown-item" value="1">中文</button>
    <button id="bt2"  class="dropdown-item" value="2">英文</button>
    <button id="bt3"  class="dropdown-item" value="3">簡體中文</button>
  </div>
        </li>  
             
                </ul>
            </div>
        </div>
    </nav> 
    
<%
  String lan="";
%>

<script type="text/javascript">
$("button").click(function() {
    var langu = $(this).val();
  
  if(langu==1){<%lan="zh";%>alert(langu);}
  
  else if(langu==2){<%lan="en";%>alert(langu);}
  
  else {<%lan="jp";%>alert(langu);}
  //alert都是正確的.....但lan一直錯
});
</script>
<%
  out.println(lan);//不管我按什麼,他都是jp...
%>
     

想問要怎麼改才能抓到正確值?

Homura iT邦高手 1 級 ‧ 2018-08-01 16:22:04 檢舉
你的意思是下面那個jp為什麼不會跟著你按扭改變對嗎?
神威 iT邦研究生 4 級 ‧ 2018-08-01 16:24:18 檢舉
Homura 對,我希望我按中文時,至少String lan="zh"出來...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
最佳解答

js 傳值給 jsp 要透過 post 或 get 的方式,不要亂用~
/images/emoticon/emoticon10.gif

<a href="/?lang=tw">中文</a>
<a href="/?lang=en">英文</a>
<a href="/?lang=cn">簡體中文</a>

<%= request.getParameter("lang") %>
看更多先前的回應...收起先前的回應...
神威 iT邦研究生 4 級 ‧ 2018-08-01 16:07:01 檢舉

大大好:

<a href="/?lang=tw">中文</a>

這不是轉跳到另一頁的語法嗎?
我打上去後,他就轉跳到tomcat首頁....

那個...
我只是希望按下按鈕後值可以被記錄下來..
沒想要轉跳頁面

那個href連結,要換成你這個頁面的連結,才不會跳到首頁,你這個jsp頁面連結是什麼?

神威 iT邦研究生 4 級 ‧ 2018-08-01 16:16:03 檢舉

我這個頁面是head.jsp
所以應該是

<a href="head.jsp/?lang=tw">中文</a>

這樣嗎?
還是不行說..

對了,我這head.jsp是只有寫menu選單而已,這樣可以嗎?

我都用在其他頁面用

 $(document).ready(function () {
            $("#head1").load("../public/head.jsp");       
        });

來把這單頭導入所有網頁中...

是這樣,斜線不用了…
要讓所有頁面抓到,最簡單的方式,用session吧~
把lang存到session裡

<a href="head.jsp?lang=tw">中文</a>

<%= request.getParameter("lang") %>
神威 iT邦研究生 4 級 ‧ 2018-08-01 16:38:16 檢舉

恩恩,我就是打算取出值後用session

目前結果

<a href="head.jsp?lang=tw">中文</a>

https://ithelp.ithome.com.tw/upload/images/20180801/201029836ztrF9GPWg.jpg

以下我的程式碼:
head.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<body>
<nav class="nav navbar-default" >
        <div class="container-fluid">
    <div class="collapse navbar-collapse" id="myNavbar">
            
                <ul class="nav navbar-nav navbar-right">
                    
                   <li>
 
<a class="btn btn-secondary dropdown-toggle" role="button" id="dropdownMenuLink" data-toggle="dropdown">
    <span class="glyphicon glyphicon-globe"></span> 語系
  </a>

  <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
   <a href="head.jsp?lang=tw">中文</a>
<a  href="head.jsp?lang=en">英文</a>
<a href="head.jsp?lang=cn">簡體中文</a>
  </div>
        </li>  </ul></div>
        </div>
    </nav> 
<%= request.getParameter("lang") %>
     

head.jsp會被所有網頁導入,以index.jsp為例
以下index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">    
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <title>index</title>
    <script>
   $(document).ready(function () {
            $("#head1").load("../public/head.jsp");       
        });
    </script> 
    </head>
    <body>
<div id="head1"></div>
 <div class="container-fluid">
     <center><font color="blue" size="7">熱門產品</font></center>
</div>
    </body>
</html>

你要寫完整網址丫…
/images/emoticon/emoticon46.gif

<a href="/jsweb/jsp/head.jsp?lang=tw">中文</a>
Homura iT邦高手 1 級 ‧ 2018-08-01 16:49:04 檢舉

他如果是用Google的翻譯API
我想只要建立一個cookie裡面存下目前選擇的語言
然後載入頁面JS去讀那個coookie做翻譯就行了...

神威 iT邦研究生 4 級 ‧ 2018-08-01 16:51:25 檢舉

恩恩,了解,抱歉,耍蠢了

<a href="/jfweb/public/head.jsp?lang=tw">中文</a>

我改成這樣,這是我的路徑
但是他會變成這樣
https://ithelp.ithome.com.tw/upload/images/20180801/20102983va7EHYUsQY.png
只剩下單頭,body都不見了
(是說head.jsp本來就只有單頭)
所以我是不是切換語言都一定要把他轉到特定頁面才行?

那要放你主頁面的連結才對,就是包住全部頁面的那個連結~

用Google的翻譯API,應該會翻譯的怪怪的~
https://www.arefly.com/add-google-translate-to-website/

神威 iT邦研究生 4 級 ‧ 2018-08-01 17:06:11 檢舉

我直接改成主頁了

<a   href="/jfweb/jsp/index.jsp?lang=tw">中文</a>

https://ithelp.ithome.com.tw/upload/images/20180801/20102983gjkzvsJYSY.png
但值是null

還有,想問,除了跳回主畫面還有沒有其他方法呢?
例如我看英文版網頁
但是b.jsp的內容比較難,所以我就按翻成中文
但若是按個按鍵就跳回主畫面,而不是留再b.jsp的話
感覺會造成user麻煩...

神威 iT邦研究生 4 級 ‧ 2018-08-01 17:07:12 檢舉

我有試過用google
因為翻得太爛(我需要翻一些專有名詞),果斷放棄....

不是跳回主頁面,jsp 的include是這樣用的… 不是用js load...
/images/emoticon/emoticon04.gif
https://www.ibm.com/developerworks/cn/java/j-jsp04293/index.html

Homura iT邦高手 1 級 ‧ 2018-08-01 17:18:24 檢舉

另一種方法是像微軟那樣
在同一個Domain下又分成好幾個不同的語言的網站
例如
英文
https://docs.microsoft.com/en-us/
中文
https://docs.microsoft.com/zh-tw/
日文
https://docs.microsoft.com/ja-jp/

神威 iT邦研究生 4 級 ‧ 2018-08-02 11:27:41 檢舉

研究了很久,我可以順利的切換中/英文了

但是
假設我在login.jsp按英文翻譯
他還是會跳到index.jsp
我還要自己點login.jsp
才會看到英文

不是跳回主頁面,jsp 的include是這樣用的....

我看了還是不太懂如何按英文翻譯後
他還是保留在原來頁面....
head.jsp

<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<a class="dropdown-item"  href="/jfweb/jsp/index.jsp?lang=tw">中文</a></br>
 <a class="dropdown-item"  href="/jfweb/jsp/index.jsp?lang=en">英文</a></br>
    
  </div>
  
<%String lang2=request.getParameter("lang");
  session.setAttribute("lang", lang2);
   //response.setIntHeader("Refresh", 1);
%>

login.jsp

<%    Object lang=session.getAttribute("lang"); 
  String Lang="";
  if(lang!=null){Lang=lang.toString();}
  else{Lang="tw";} 
    <%@ include file="../public/head.jsp" %>
    

謝謝

不知道你是head_1 還是head? 你的b.jsp,有包括head.jsp嗎? 沒有當然沒辦法同時切換丫
/images/emoticon/emoticon10.gif

神威 iT邦研究生 4 級 ‧ 2018-08-02 11:46:17 檢舉

上面程式已改,造成混亂,抱歉....
那個,我的head.jsp通通都是用導入的
沒有和任何一頁面寫在一起,這樣可行嗎?
或是一定得寫一起呢?

不用寫在一起,如果不想導到index, /jfweb/jsp/index.jsp 這個你要用jsp抓目前所在的網址放上去,在首頁就用成/jfweb/jsp/index.jsp,在b.jsp就用成/jfweb/jsp/b.jsp,
至於jsp怎麼抓網址,隨便google就有了,應該不用再問了~

<a class="dropdown-item" href="/jfweb/jsp/<%= 網址 %>?lang=en">英文</a>
神威 iT邦研究生 4 級 ‧ 2018-08-02 15:13:42 檢舉

謝謝你,我終於搞出來了

--
感謝

記得來結案~
/images/emoticon/emoticon10.gif

0
Homura
iT邦高手 1 級 ‧ 2018-08-01 16:31:15

因為你前後端搞錯了啊........
<%%>區段是Server端(後端)一次執行完送出
你的按鈕是前端JS在跑的...
所以你最後lan才會是jp

你想做的事應該在前端就能達成了

你要變動的區塊用<div>包起來給一個id
例如目前是jp

<div id="lang">
jp
</div>

然後點按鈕時JS去改變那個區塊
JS改成這樣

$("button").click(function () {
    var langu = $(this).val();
    //console.log(langu);
    if (langu == 1) { 
        $('#lang').html('ch') 
    }
    else if (langu == 2) {
        $('#lang').html('eng') 
    }
    else { 
        $('#lang').html('jp') 
    } 
});

這樣改jsp不會知道吧… 是要做mutile language...

Homura iT邦高手 1 級 ‧ 2018-08-01 16:43:12 檢舉

kksugsay
是啊
我回完才發現他的問題不是這樣....
/images/emoticon/emoticon06.gif

我要發表回答

立即登入回答