How to process string value after 'el' processing

B

Berlin Brown

I have a jsp jstl question. It is actually kind of simple, but I still
couldnt get an answer. And it is more of a design question.

How do you do 'processing' or manipulation of a string value 'after' it
has been processed through 'el' jstl?


"I am having trouble doing basic view manipulation on data output from
the expression language. I dont 'think' I need custom tags for this,
and dont think this logic should occur at the controller or model? But
for example, if I want to modify a value before it is display to the
user but after it has been evaluated: Ie."

This is my current approach.
Would it have been more logical to place:

"<jsp:useBean id="concatValue"
class="org.spirit.servlet.bean.BotListConcatValue" />
<jsp:setProperty name="concatValue" property="maxLen" value="20" />"

Within the 'forEach' bracket?

Logic in the bean:

public String getWord() {
if (word != null && (word.length() > (maxLen + 3))) {
word = word.substring(0, (maxLen - 1)) + "...";
}
return word;
}

<jsp:useBean id="concatValue"
class="org.spirit.servlet.bean.BotListConcatValue" />
<jsp:setProperty name="concatValue" property="maxLen" value="20" />
<c:forEach items="${linklistings}"
var="listing" varStatus="status">
<c:set target="${concatValue}" property="word"
value="${listing.urlTitle}"/>
<c:eek:ut value="${concatValue.word}" />
</c:forEach>
 
D

Daniel Pitts

Berlin said:
I have a jsp jstl question. It is actually kind of simple, but I still
couldnt get an answer. And it is more of a design question.

How do you do 'processing' or manipulation of a string value 'after' it
has been processed through 'el' jstl?


"I am having trouble doing basic view manipulation on data output from
the expression language. I dont 'think' I need custom tags for this,
and dont think this logic should occur at the controller or model? But
for example, if I want to modify a value before it is display to the
user but after it has been evaluated: Ie."

This is my current approach.
Would it have been more logical to place:

"<jsp:useBean id="concatValue"
class="org.spirit.servlet.bean.BotListConcatValue" />
<jsp:setProperty name="concatValue" property="maxLen" value="20" />"

Within the 'forEach' bracket?

Logic in the bean:

public String getWord() {
if (word != null && (word.length() > (maxLen + 3))) {
word = word.substring(0, (maxLen - 1)) + "...";
}
return word;
}

<jsp:useBean id="concatValue"
class="org.spirit.servlet.bean.BotListConcatValue" />
<jsp:setProperty name="concatValue" property="maxLen" value="20" />
<c:forEach items="${linklistings}"
var="listing" varStatus="status">
<c:set target="${concatValue}" property="word"
value="${listing.urlTitle}"/>
<c:eek:ut value="${concatValue.word}" />
</c:forEach>
You don't NEED a special tag for this, but I would probably implement
it that way. Or make it a el function. Either way, adding it the the
TLD is the right approach, instead of using the bean the way you do.

I agree, it doesn't really belong in the controller or the model, as it
is specific to the rendering (i.e., view) of the data.

Creating a TLD isn't too hard, and it is very easy to add an el
function (you can basically use a static function).

public static String trim(String word) {
if (word != null && (word.length() > (maxLen + 3))) {
word = word.substring(0, (maxLen - 1)) + "...";
return word;
}

and use ${mytld:trim(listing.urlTitle)} to display it.

Hope this helps,
Daniel.
 
B

Berlin Brown

Daniel said:
You don't NEED a special tag for this, but I would probably implement
it that way. Or make it a el function. Either way, adding it the the
TLD is the right approach, instead of using the bean the way you do.

I agree, it doesn't really belong in the controller or the model, as it
is specific to the rendering (i.e., view) of the data.

Creating a TLD isn't too hard, and it is very easy to add an el
function (you can basically use a static function).

public static String trim(String word) {
if (word != null && (word.length() > (maxLen + 3))) {
word = word.substring(0, (maxLen - 1)) + "...";
return word;
}

and use ${mytld:trim(listing.urlTitle)} to display it.

Hope this helps,
Daniel.


I tried that, but I dont think the version of TLD I am using supports
'functions'. I am using pre JSP 2.0 code and I believe jstl 1.2?
 
D

Daniel Pitts

Berlin said:
I tried that, but I dont think the version of TLD I am using supports
'functions'. I am using pre JSP 2.0 code and I believe jstl 1.2?

Okay, then a tag is the way to go.
Or, *gasp* upgrading to the latest standard.
 
M

Manish Pandit

You can try using the JSTL functions library to achieve this via EL.
You can use fn:length to get the length, and fn:substring to get the
subset.

-cheers,
Manish
 

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

Forum statistics

Threads
473,968
Messages
2,570,154
Members
46,702
Latest member
LukasConde

Latest Threads

Top