Struts and javascript

M

Marcin Go³dyn

Hi

I have a javascript tree menu store in jsp page. I should put <html:link>
tags in this script but it isnt work for me. I know that web container
should compile this <html:link> tag and when i have this in js file he wont
make it. It is any possibility to solve this problem?? Or maybe there is
another way to put tree menu (it dont have to be javascript menu) in jsp
page??

thx for help
Marcin Goldyn
 
R

Ryan Dillon

Hi Marcin,

I don't think it matters (to a browser) what the suffix of the
JavaScript file is, so you could do something like:

<script language="JavaScript" type="text/javascript"
src="common.jsp"></script>

This would allow you to use tags to help you render the JavaScript.
Hope that helps.
 
M

Marcin Goldyn

i dont think if i get you right
this page common.jsp should be container for
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>



taglibs only??

this is my tree.jsp page where i store javascript tree menu:



<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>







<%

response.setHeader("Cache-Control","no-cache,no-store"); //HTTP 1.1

response.setHeader("Pragma","no-cache"); //HTTP 1.0

response.setDateHeader ("Expires", 0); //prevents caching at the proxy
server

%>



<script language="JavaScript" src="/PracaMag/pages/tree.js"></script>

<script language="JavaScript" src="/PracaMag/pages/tree_items.js"></script>

<script language="JavaScript" src="/PracaMag/pages/tree_tpl.js"></script>

<style>

a, A:link, a:visited, a:active, A:hover

{color: #000000; text-decoration: none; font-family: Tahoma, Verdana;
font-size: 12px}

</style>

<table>

<tr>

<td>

<script language="JavaScript">

new tree (TREE_ITEMS, TREE_TPL);

</script>

</td>

</tr>

</table>



this is tree.js



function tree (a_items, a_template) {

this.a_tpl = a_template;

this.a_config = a_items;

this.o_root = this;

this.a_index = [];

this.o_selected = null;

this.n_depth = -1;


var o_icone = new Image(),

o_iconl = new Image();

o_icone.src = a_template['icon_e'];

o_iconl.src = a_template['icon_l'];

a_template['im_e'] = o_icone;

a_template['im_l'] = o_iconl;

for (var i = 0; i < 64; i++)

if (a_template['icon_' + i]) {

var o_icon = new Image();

a_template['im_' + i] = o_icon;

o_icon.src = a_template['icon_' + i];

}


this.toggle = function (n_id) { var o_item = this.a_index[n_id];
o_item.open(o_item.b_opened) };

this.select = function (n_id) { return this.a_index[n_id].select(); };

this.mout = function (n_id) { this.a_index[n_id].upstatus(true) };

this.mover = function (n_id) { this.a_index[n_id].upstatus() };

this.a_children = [];

for (var i = 0; i < a_items.length; i++)

new tree_item(this, i);

this.n_id = trees.length;

trees[this.n_id] = this;


for (var i = 0; i < this.a_children.length; i++) {

document.write(this.a_children.init());

this.a_children.open();

}

}

function tree_item (o_parent, n_order) {

this.n_depth = o_parent.n_depth + 1;

this.a_config = o_parent.a_config[n_order + (this.n_depth ? 2 : 0)];

if (!this.a_config) return;

this.o_root = o_parent.o_root;

this.o_parent = o_parent;

this.n_order = n_order;

this.b_opened = !this.n_depth;

this.n_id = this.o_root.a_index.length;

this.o_root.a_index[this.n_id] = this;

o_parent.a_children[n_order] = this;

this.a_children = [];

for (var i = 0; i < this.a_config.length - 2; i++)

new tree_item(this, i);

this.get_icon = item_get_icon;

this.open = item_open;

this.select = item_select;

this.init = item_init;

this.upstatus = item_upstatus;

this.is_last = function () { return this.n_order ==
this.o_parent.a_children.length - 1 };

}

function item_open (b_close) {

var o_idiv = get_element('i_div' + this.o_root.n_id + '_' + this.n_id);

if (!o_idiv) return;


if (!o_idiv.innerHTML) {

var a_children = [];

for (var i = 0; i < this.a_children.length; i++)

a_children= this.a_children.init();

o_idiv.innerHTML = a_children.join('');

}

o_idiv.style.display = (b_close ? 'none' : 'block');


this.b_opened = !b_close;

var o_jicon = document.images['j_img' + this.o_root.n_id + '_' + this.n_id],

o_iicon = document.images['i_img' + this.o_root.n_id + '_' + this.n_id];

if (o_jicon) o_jicon.src = this.get_icon(true);

if (o_iicon) o_iicon.src = this.get_icon();

this.upstatus();

}

function item_select (b_deselect) {

if (!b_deselect) {

var o_olditem = this.o_root.o_selected;

this.o_root.o_selected = this;

if (o_olditem) o_olditem.select(true);

}

var o_iicon = document.images['i_img' + this.o_root.n_id + '_' + this.n_id];

if (o_iicon) o_iicon.src = this.get_icon();

get_element('i_txt' + this.o_root.n_id + '_' + this.n_id).style.fontWeight =
b_deselect ? 'normal' : 'bold';


this.upstatus();

return Boolean(this.a_config[1]);

}

function item_upstatus (b_clear) {

window.setTimeout('window.status="' + (b_clear ? '' : this.a_config[0] +
(this.a_config[1] ? ' ('+ this.a_config[1] + ')' : '')) + '"', 10);

}

function item_init () {

var a_offset = [],

o_current_item = this.o_parent;

for (var i = this.n_depth; i > 1; i--) {

a_offset = '<img src="' + this.o_root.a_tpl[o_current_item.is_last() ?
'icon_e' : 'icon_l'] + '" border="0" align="absbottom">';

o_current_item = o_current_item.o_parent;

}

return '<table cellpadding="0" cellspacing="0" border="0"><tr><td nowrap>' +
(this.n_depth ? a_offset.join('') + (this.a_children.length

? '<a href="javascript: trees[' + this.o_root.n_id + '].toggle(' + this.n_id
+ ')" onmouseover="trees[' + this.o_root.n_id + '].mover(' + this.n_id + ')"
onmouseout="trees[' + this.o_root.n_id + '].mout(' + this.n_id + ')"><img
src="' + this.get_icon(true) + '" border="0" align="absbottom" name="j_img'
+ this.o_root.n_id + '_' + this.n_id + '"></a>'

: '<img src="' + this.get_icon(true) + '" border="0" align="absbottom">') :
'')

+ '<html:link forward="showitem"><img src="' + this.get_icon() + '"
border="0" align="absbottom" name="i_img' + this.o_root.n_id + '_' +
this.n_id + '" class="t' + this.o_root.n_id + 'im">' + this.a_config[0] +
'</html:link></td></tr></table>' + (this.a_children.length ? '<div
id="i_div' + this.o_root.n_id + '_' + this.n_id + '"
style="display:none"></div>' : '');

}

function item_get_icon (b_junction) {

return this.o_root.a_tpl['icon_' + ((this.n_depth ? 0 : 32) +
(this.a_children.length ? 16 : 0) + (this.a_children.length && this.b_opened
? 8 : 0) + (!b_junction && this.o_root.o_selected == this ? 4 : 0) +
(b_junction ? 2 : 0) + (b_junction && this.is_last() ? 1 : 0))];

}

var trees = [];

get_element = document.all ?

function (s_id) { return document.all[s_id] } :

function (s_id) { return document.getElementById(s_id) };



and this is what was before i put <html:link>

'<a href="' + this.a_config[1] + '" target="' + this.o_root.a_tpl['target']
+ '" onclick="return trees[' + this.o_root.n_id + '].select(' + this.n_id +
')" ondblclick="trees[' + this.o_root.n_id + '].toggle(' + this.n_id + ')"
onmouseover="trees[' + this.o_root.n_id + '].mover(' + this.n_id + ')"
onmouseout="trees[' + this.o_root.n_id + '].mout(' + this.n_id + ')"
class="t' + this.o_root.n_id + 'i" id="i_txt' + this.o_root.n_id + '_' +
this.n_id + '"><img src="' + this.get_icon() + '" border="0"
align="absbottom" name="i_img' + this.o_root.n_id + '_' + this.n_id + '"
class="t' + this.o_root.n_id + 'im">' + this.a_config[0] + '</a>



it doesnt create me anything on the reult page cause its create dynamically

any suggestions??

thx

Macin Goldyn
 
R

Ryan Dillon

If I have understood correctly, you are saying the problem is that the
<html:link/> tags in tree.js file are not being processed? If this is
the case, then I think the following might work:

1) Change the following line in tree.jsp:

<script language="JavaScript" src="/PracaMag/pages/tree.js"></script>
to
<script language="JavaScript"
src="/PracaMag/pages/tree_js.jsp"></script>

2) Rename tree.js to tree_js.jsp

The .jsp extension will trigger the servlet engine to process the
Javascript file as a JSP page, thus rendering the tags.

Does that help?

Regards
Ryan
 
M

Marcin Goldyn

it`s almost great:D
but i have another problem now i lose my jsessionid number ;(
<html:link> point to my action but there is a diffrent jsession nuber in url
and i dont know where or how i have created this new session

Marcin Goldyn
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,677
Members
48,796
Latest member
Greg L.

Latest Threads

Top