Convert Java variable to Javascript variable

Hi guys,

This is pretty weird. I'm using BEA workshop 8.1. In my JSP, there is a Javascript which I need to convert a Java variable to Javascript variable.

A section of my codes goes below:

<%
String hsCode = request.getAttribute("hsCode");
System.out.println(hsCode);
%>
var JShsCode = <%=hsCode%>;
alert(JShsCode);

In my console, the hsCode is printed out as 0701, but in my alert box when I load the JSP, JShsCode becomes 449. With each different value of hsCode, the JShsCode value changes .e.g. hsCode 077 will alert me JShsCode 63.

Any ideas on this?

leon24Asked:
Who is Participating?
 
Richard QuadlingConnect With a Mentor Senior Software DeveloperCommented:
0701 in many languages equates to an octal number - the decimal of which is 449.

Using PHP ...

<?php echo 0701; ?>

outputs ...

449

As both PHP and JS are loosely typed, you can use strings.

<?php echo '0701'; ?>

outputs ...

0701

So try ....
<%
String hsCode = request.getAttribute("hsCode");
System.out.println(hsCode);
%>
var JShsCode = '<%=hsCode%>';
alert(JShsCode);

Open in new window

0
 
Göran AnderssonConnect With a Mentor Commented:
When you put a zero as the first digit in a numeric literal in Javascript, it's interpreted as an octal number (base 8).

You can either convert the value to a number in the server code, so that it's output into the page without the leading zero, or parse the string with a specific base in the Javascript code:

car JShsCode = parseInt('<%=hsCode%>', 10);
0
 
Richard QuadlingSenior Software DeveloperCommented:
Oh. The trigger for an octal number is a leading 0.

You could also left trim all leading zeros.

Not sure on the Java method for that.

You could just read 1 char at a time and convert to a space and then not put the quotes in the JS output.

So, (using _ as a space), 0701 ...

var JShsCode = 0701;

becomes (remember using _ as a space) ...

var JShsCode = _701;


Which removes the octal notation marker.
0
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

 
Richard QuadlingSenior Software DeveloperCommented:
Personally, I would output the correct value from the server rather than getting the client to do the call.
0
 
leon24Author Commented:
Hi guys,

I've tried using the methods mentioned, I've missed this part out earlier in my question. The hsCode 0701 is a number which the user input, which means it could be 334 or 0802 or 0701 or anything (numeric). And I tried using parseInt, but it doesnt retain the 0 in front, as code 0701 is different from 701.

Any idea?
0
 
Richard QuadlingConnect With a Mentor Senior Software DeveloperCommented:
You say "number" ...

0701 === 449 === 0x1c1

They are the same thing, just different representations.

I think you really mean string.

If so, use the attached snippet.

Don't try to convert the text the user entered.

You may want to validate that the string only contains digits (regex /^[\d]+$/ for example - change + to * to allow blank).
<%
String hsCode = request.getAttribute("hsCode");
System.out.println(hsCode);
%>
var JShsCode = '<%=hsCode%>';
alert(JShsCode);

Open in new window

0
 
leon24Author Commented:
OK guys I've solved it oredi and using '<%=hsCode%>' works fine and retains the leading 0 in front. You guys are cool s**t!
0
 
Richard QuadlingSenior Software DeveloperCommented:
Well, we are Experts anyway!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.