public class MyFirstTag extends TagSupport
{
private Iterator iterator;
private ArrayList<String> _collection = new ArrayList<String>();
private String id;
private String newEl ;
public int doStartTag() throws JspTagException
{
try
{
JspWriter out = pageContext.getOut();
if (_collection == null)
{
out.print("empty collection");
throw new JspTagException("No collection with name " + _collection + " found");
}
iterator = _collection.iterator();
out.print("<SELECT name=\"myListik\" onchange=\"tar1.value = myListik.value\">");
if (iterator.hasNext())
{
pageContext.setAttribute("item", iterator.next());
out.print("<OPTION value = "+(String)pageContext.getAttribute("item")+ ">"+
(String)pageContext.getAttribute("item"));
return EVAL_BODY_INCLUDE;
}
else
{
out.print("</SELECT>");
out.print("<input TYPE=TEXT NAME=\"tar1\" value=\"From my tag!(from else)\">");
return SKIP_BODY;
}
}
catch(Exception e)
{
return SKIP_BODY;
}
}
public int doAfterBody()
{
try
{
JspWriter out = pageContext.getOut();
if (iterator.hasNext())
{
//out.print(iterator.next());
pageContext.setAttribute("item", iterator.next());
out.print("<OPTION value ="+(String)pageContext.getAttribute("item")+ ">"+
(String)pageContext.getAttribute("item"));
return EVAL_BODY_AGAIN;
}
else
{
out.print("</SELECT>");
out.print("<input TYPE=TEXT NAME=\"tar1\" value=\"From my tag!\">");
return SKIP_BODY;
}
}
catch (Exception e)
{
return SKIP_BODY;
}
}
public void setCollection(ArrayList<String> collection)
{
this._collection = collection;
}
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
}
Custom tag. Итерационный+вложенный
вопрос такой, имеется итерационный кастом тег, а в нём вложенный, но на каждой итерации этот тег читает вложенный снова, повторяя его... Таким образом у меня на странице например написано 10 одинаковых слов(т.к итераций 10)... можно ли от этого ка-нибудь избавиться? и если да, подскажите пожалуйста как?
Цитата: Irene_001
вопрос такой, имеется итерационный кастом тег, а в нём вложенный, но на каждой итерации этот тег читает вложенный снова, повторяя его... Таким образом у меня на странице например написано 10 одинаковых слов(т.к итераций 10)... можно ли от этого ка-нибудь избавиться? и если да, подскажите пожалуйста как?
А дать код нам сюда - никак? Военная тайна? Правила постинга в раздел читаем, ага.
Пыталась сделать следующее: выпадающий список, опции которого можно устанавливать как при помощи коллекции так и вручнцю... выкладываю весь код...
Основной тег:
Код:
Теперь сам вложенный тег:
Код:
public class ParameterTag extends BodyTagSupport {
public int doStartTag() throws JspException
{
MyFirstTag parentTag =(MyFirstTag)findAncestorWithClass(this, MyFirstTag.class);
if (parentTag == null)
{
throw new JspException("Tag should be nested in \"primenumtag\" Tag");
}
return EVAL_BODY_TAG;
}
public int doEndTag() throws JspException
{
String prime =(String)pageContext.getAttribute("value");
String s = bodyContent.getString();
try
{
bodyContent.clearBody();
bodyContent.println("<option>"+s+"<br/>");
pageContext.setAttribute("item",s);
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
catch(IOException ioe)
{
throw new JspException(ioe.getMessage());
}
return SKIP_BODY;
}
}
public int doStartTag() throws JspException
{
MyFirstTag parentTag =(MyFirstTag)findAncestorWithClass(this, MyFirstTag.class);
if (parentTag == null)
{
throw new JspException("Tag should be nested in \"primenumtag\" Tag");
}
return EVAL_BODY_TAG;
}
public int doEndTag() throws JspException
{
String prime =(String)pageContext.getAttribute("value");
String s = bodyContent.getString();
try
{
bodyContent.clearBody();
bodyContent.println("<option>"+s+"<br/>");
pageContext.setAttribute("item",s);
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
catch(IOException ioe)
{
throw new JspException(ioe.getMessage());
}
return SKIP_BODY;
}
}
и сама JSP страничка:
Цитата:
<HTML>
<HEAD>
<%@ taglib uri="mytaglib.tld" prefix="mytaglib" %>
<jsp:useBean id="rotator" class="packx.ReduktingTeg" />
</HEAD>
<BODY>
<% java.util.ArrayList al = new java.util.ArrayList();
al.add("One");
al.add("Two");
al.add("Three");
al.add("Four");
al.add("Five");
%>
Collection to Iterate over is <%=al%> ..... <p>
<B>Iterating ...</B><br>
<FORM name = "formname" TYPE=POST ACTION=fitrstJsp.jsp>
<mytaglib:first collection="<%= al%>" id = "1" >
<mytaglib:abcd>hello_1</mytaglib:abcd>
<mytaglib:abcd>world_2</mytaglib:abcd>
</mytaglib:first>
<INPUT TYPE=TEXT NAME="ADDRESS">
</form>
</p>
</BODY>
</HTML>
<HEAD>
<%@ taglib uri="mytaglib.tld" prefix="mytaglib" %>
<jsp:useBean id="rotator" class="packx.ReduktingTeg" />
</HEAD>
<BODY>
<% java.util.ArrayList al = new java.util.ArrayList();
al.add("One");
al.add("Two");
al.add("Three");
al.add("Four");
al.add("Five");
%>
Collection to Iterate over is <%=al%> ..... <p>
<B>Iterating ...</B><br>
<FORM name = "formname" TYPE=POST ACTION=fitrstJsp.jsp>
<mytaglib:first collection="<%= al%>" id = "1" >
<mytaglib:abcd>hello_1</mytaglib:abcd>
<mytaglib:abcd>world_2</mytaglib:abcd>
</mytaglib:first>
<INPUT TYPE=TEXT NAME="ADDRESS">
</form>
</p>
</BODY>
</HTML>
Всё, спасибо, вопрос снимаю, разобралась :)
Цитата: Irene_001
Всё, спасибо, вопрос снимаю, разобралась :)
Покажешь тогда, в чем была ошибка? Наверняка, кому-то твой опыт пригодится.
Цитата: Zorkus
Покажешь тогда, в чем была ошибка? Наверняка, кому-то твой опыт пригодится.
Я не уверена в правильности моего кода, но я добивалась чтоб он работал именно так как мне нужно было:
(P.S. код немного "сыроват")
Мой первый основной тег:
Код:
public class MyFirstTag extends TagSupport
{
private Iterator iterator;
private ArrayList<String> _collection = new ArrayList<String>();
private String id;
public int doStartTag() throws JspTagException
{
try
{
JspWriter out = pageContext.getOut();
if (_collection == null)
{
out.print("empty collection");
throw new JspTagException("No collection with name " + _collection + " found");
}
out.print("<SELECT name=\"myListik\" onchange=\"ShowMyData.value = myListik.value\">");
iterator = _collection.iterator();
}
catch(Exception e)
{
return SKIP_BODY;
}
return EVAL_BODY_INCLUDE;
}
public int doAfterBody()
{
try
{
JspWriter out = pageContext.getOut();
while (iterator.hasNext())
{
pageContext.setAttribute("item", iterator.next());
out.print("<OPTION value = "+(String)pageContext.getAttribute("item")+ ">"+
(String)pageContext.getAttribute("item"));
}
out.print("</SELECT>");
out.print("<input TYPE=TEXT NAME=\"ShowMyData\" value=\"From my tag!\">");
return SKIP_BODY;
}
catch (Exception e)
{
return SKIP_BODY;
}
}
public void setCollection(ArrayList<String> collection)
{
this._collection = collection;
}
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
}
{
private Iterator iterator;
private ArrayList<String> _collection = new ArrayList<String>();
private String id;
public int doStartTag() throws JspTagException
{
try
{
JspWriter out = pageContext.getOut();
if (_collection == null)
{
out.print("empty collection");
throw new JspTagException("No collection with name " + _collection + " found");
}
out.print("<SELECT name=\"myListik\" onchange=\"ShowMyData.value = myListik.value\">");
iterator = _collection.iterator();
}
catch(Exception e)
{
return SKIP_BODY;
}
return EVAL_BODY_INCLUDE;
}
public int doAfterBody()
{
try
{
JspWriter out = pageContext.getOut();
while (iterator.hasNext())
{
pageContext.setAttribute("item", iterator.next());
out.print("<OPTION value = "+(String)pageContext.getAttribute("item")+ ">"+
(String)pageContext.getAttribute("item"));
}
out.print("</SELECT>");
out.print("<input TYPE=TEXT NAME=\"ShowMyData\" value=\"From my tag!\">");
return SKIP_BODY;
}
catch (Exception e)
{
return SKIP_BODY;
}
}
public void setCollection(ArrayList<String> collection)
{
this._collection = collection;
}
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
}
обработчик вложенного:
Код:
public class ParameterTag extends BodyTagSupport {
MyFirstTag parentTag;
public int doStartTag() throws JspException
{
parentTag =(MyFirstTag)findAncestorWithClass(this, MyFirstTag.class);
if (parentTag == null)
{
throw new JspException("Tag should be nested in \"primenumtag\" Tag");
}
return EVAL_BODY_TAG;
}
public int doEndTag() throws JspException
{
String prime =(String)pageContext.getAttribute("value");
String s = bodyContent.getString();
try
{
bodyContent.clearBody();
bodyContent.println("<option value = "+s + ">"+s+"<br/>");
pageContext.setAttribute("item",s);
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
catch(IOException ioe)
{
throw new JspException(ioe.getMessage());
}
return SKIP_BODY;
}
}
MyFirstTag parentTag;
public int doStartTag() throws JspException
{
parentTag =(MyFirstTag)findAncestorWithClass(this, MyFirstTag.class);
if (parentTag == null)
{
throw new JspException("Tag should be nested in \"primenumtag\" Tag");
}
return EVAL_BODY_TAG;
}
public int doEndTag() throws JspException
{
String prime =(String)pageContext.getAttribute("value");
String s = bodyContent.getString();
try
{
bodyContent.clearBody();
bodyContent.println("<option value = "+s + ">"+s+"<br/>");
pageContext.setAttribute("item",s);
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
catch(IOException ioe)
{
throw new JspException(ioe.getMessage());
}
return SKIP_BODY;
}
}
и сама JSP страничка
Код:
<HTML>
<HEAD>
<%@ taglib uri="mytaglib.tld" prefix="mytaglib" %>
<jsp:useBean id="rotator" class="packx.ReduktingTeg" />
</HEAD>
<BODY>
<% java.util.ArrayList al = new java.util.ArrayList();
al.add("One");
al.add("Two");
al.add("Three");
al.add("Four");
al.add("Five");
%>
Collection to Iterate over is <%=al%> ..... <p>
<B>Iterating ...</B><br>
<FORM name = "formname" TYPE=POST ACTION=fitrstJsp.jsp>
<mytaglib:first collection="<%= al%>" id = "1" >
<mytaglib:abcd>hello_1</mytaglib:abcd>
<mytaglib:abcd>world_2</mytaglib:abcd>
</mytaglib:first>
<INPUT TYPE=TEXT NAME="ADDRESS">
</form>
</p>
</BODY>
</HTML>
<HEAD>
<%@ taglib uri="mytaglib.tld" prefix="mytaglib" %>
<jsp:useBean id="rotator" class="packx.ReduktingTeg" />
</HEAD>
<BODY>
<% java.util.ArrayList al = new java.util.ArrayList();
al.add("One");
al.add("Two");
al.add("Three");
al.add("Four");
al.add("Five");
%>
Collection to Iterate over is <%=al%> ..... <p>
<B>Iterating ...</B><br>
<FORM name = "formname" TYPE=POST ACTION=fitrstJsp.jsp>
<mytaglib:first collection="<%= al%>" id = "1" >
<mytaglib:abcd>hello_1</mytaglib:abcd>
<mytaglib:abcd>world_2</mytaglib:abcd>
</mytaglib:first>
<INPUT TYPE=TEXT NAME="ADDRESS">
</form>
</p>
</BODY>
</HTML>
(Правда не совсем итерационный тег вышел :) )