Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    tag personalizzato multicolonna

    Ciao.
    Vorrei realizzare un tag personalizzato per gestire i layout multicolonna.
    In pratica ho un template di una cella e devo ripeterla ad es per 2 volte.
    Io faccio il contatore % 2(se sono 2 colonne) e guardo il resto e se è 1 vado a capo.
    Vorrei utilizzare un tag personalizzato per poter ad esempio in un futuro impaginare su 1 o 3 colonne.

    In pratica da quel po che so si potrebbe impostare un tag con corpo, ma non ho le idee ben chiare.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    inoltre vorrei anche un aiuto su come creare un custom tag:definizioni,file.tag ecc,(uso jbuilder 2005)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    ps. vorrei customizzare i bodytag da codice e non i custom tag jstl(file .tag)

  4. #4
    Utente di HTML.it L'avatar di blueice
    Registrato dal
    Feb 2001
    Messaggi
    121
    Dovrai crearti la tua classe Tag simile a questa che ho creato e che ti mostro :

    Codice PHP:
    public class ForEachReverseTag extends BodyTagSupport {
        
        static final 
    long serialVersionUID 4230004230004230001L;
        
        private 
    int begin 0;
        private 
    int end 0;
        
        private static final 
    Logger _LOGGER Logger.getLogger"ipi.portal.search" );
        
        public 
    void setBegin (String begin){
            try{        
                
    this.begin Integer.parseInt((String)ExpressionEvaluatorManager.evaluate("begin"begin
                        
    String.class, thispageContext));
                
            }catch(
    JspException ex){
                
    _LOGGER.error("JspException : "ex);
            }
        }
        
        public 
    void setEnd (String end) {
            try{        
                
    this.end Integer.parseInt((String)ExpressionEvaluatorManager.evaluate("end"end
                        
    String.class, thispageContext));
                
            }catch(
    JspException ex){
                
    _LOGGER.error("JspException : "ex);
            }

        }
        
        public 
    void doInitBody() throws JspException{
            if(
    this.end  <= this.begin) {

                
    pageContext.setAttribute(Attributes.LOOP_ITEMInteger.toString(this.begin));

                
    this.begin --;
            }
        }
        
        public 
    int doAfterBody() throws JspException{

            if(
    this.end  <= this.begin) {

                
    pageContext.setAttribute(Attributes.LOOP_ITEM, new Integer(this.begin));
                
                
    this.begin --;
                
                
    //Continue looping
                
    return EVAL_BODY_TAG;
                
            } else {
                
    // We're done
                
    return SKIP_BODY;
            }
            
        }

        public 
    int doEndTag() throws JspException {
            
            try {
                
    pageContext.getOut().print(bodyContent.getString());
                return 
    EVAL_PAGE;
            } catch (
    Exception e) {
                throw new 
    JspException(e.getMessage());
            }
        }
        

    Dovresti studiarti che cosa fa ogni singolo metodo doEndTag(),doStartTag(),doInitBody(),doAfterBody() . Dopo aver creato il tuo Custom Tag dovrai configurarlo nel file .tld nel seguente modo :

    Codice PHP:
      <tag>

        <
    name>forEachReverse</name>

        <
    tag-class>com.informa.ipi.admin.tags.ForEachReverseTag</tag-class>

        <
    body-content>JSP</body-content>

        <
    description>

            
    I've made this tag to print year option values reverse. From 2006 to whereever I want.

            It works from a begin number major than end number.

        </description>

        <attribute>

        <name>begin</name>

        <required>false</required>

        <rtexprvalue>false</rtexprvalue>

        </attribute>

        <attribute>

        <name>end</name>

        <required>false</required>

        <rtexprvalue>false</rtexprvalue>

        </attribute>

      </tag 
    Questo è un'esempio ora dovresti studiare un pò di più J2EE, visita qui :
    http://java.sun.com/j2ee/1.4/docs/tu...doc/index.html

    Ho capito che lavorare stanca ma studiare ti mantiene la mente elastica ...

  5. #5

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie blueice sei stato molto gentile.adesso vado a vedere il tuo link.
    intanto so che è molto semplice, ma se mai potesse essere utile a qualcuno ho risolto con un bodytag ,adesso faccio una paginazione,la domanda è questa come recuperare un indice di pagina corrente all interno del tag?(request.????)e come ripassare tutti i parametri della pagina in modo che quando faccio richiamare la pagina chesso dal tag di paginazione ">"o "<" non li perda?
    grazie.

    package popov.CustomTags;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;
    import java.io.*;

    public class TagIterativo extends BodyTagSupport {

    private String startpage;

    public void setPage(String page)
    {
    this.startpage=page;
    }

    public int doEndTag()
    {

    String Body=getBodyContent().getString();
    String afterbody="";
    String beforeBody="";
    StringBuffer textbuffer=new StringBuffer(Body);
    JspWriter out =getPreviousOut();
    int col=0;


    try
    {
    out.write("<table>");
    out.write("<tr>");
    for(int i=0;i<Integer.parseInt(this.righe);i++)
    {





    for(int j=0;j<=Integer.parseInt(this.colonne);j++)
    {
    if(Integer.parseInt(this.colonne)!=col)
    {


    out.write("<td>");
    out.write(Body);
    out.write("</td>");

    col++;
    }
    else
    {

    out.write("</tr>");

    col=0;
    }
    }


    }



    out.write("</table>");
    }
    catch(IOException e)
    {



    }

    return EVAL_PAGE;
    }

    public void setRighe(String righe) {
    this.righe = righe;
    }

    public void setColonne(String colonne) {
    this.colonne = colonne;
    }

    private String righe = "";
    private String colonne ="";
    }

    con un tld cosi:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
    "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <taglib>
    <tlibversion>1</tlibversion>
    <jspversion>1.2</jspversion>
    <shortname>popov</shortname>
    <info>OReilly Sample Tag library</info>
    <tag>
    <name>TagIterattivo</name>
    <tagclass>popov.CustomTags.TagIterativo</tagclass>
    <bodycontent>jsp</bodycontent>
    <info>
    Tag Iterattivo
    </info>
    <attribute>
    <name>colonne</name>
    <required>true</required>
    </attribute>
    <attribute>
    <name>righe</name>
    <required></required>
    </attribute>
    </tag>
    </taglib>

    immettendo il seguente codice ti impagina il contenuto del body in righe e colonne come da parametri
    <mytags:TagIterattivo colonne="4" righe="4">
    JBuilder Generated JSP
    </mytags:TagIterattivo>

    ciao.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Ho studiato il tuo tag e ho visto che è molto meglio.
    complimenti.
    è possibile passare nel corpo del tag espressioni jstl e scriplet?

  8. #8
    Utente di HTML.it L'avatar di blueice
    Registrato dal
    Feb 2001
    Messaggi
    121
    Che cosa intendi con espressioni jstl e scriptlet ?
    Cosa vuoi fare ?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    non so, mettere nel body roba del genere:

    <tag .....>
    <% i=i+1 %><%=i%>
    </.....tag>


    e fare si che nelle varie celle mi ritrovi 1 2 3 e 4 ecc.....
    graize comunque per l'interessamento blueice

  10. #10
    Utente di HTML.it L'avatar di blueice
    Registrato dal
    Feb 2001
    Messaggi
    121
    Sicuramente si può prendere un valore all'interno del custom tag. Dovresti darti una lettura alle specifiche della sun ora non ho tempo ne voglia di farlo per te.

    Una volta che stai chiamando il custom tag hai già l'oggetto con cui riempire ogni singola cella o no ?
    Quindi io non mi porrei questo problema, salverei l'oggetto in sessione e lo prenderei in custodia nel costum tag per poter riempire ogni singola elemento della griglia.

    Probabilmente utilizzi un HashMap, Hashtable, ArrayList o altro per immagazzinare i valori per la tua griglia dinamica e con un paio di formule matematiche te la cavi nella visualizzazione. Hai il numero di colonne e di righe e potresti manipolarlo come ti piace di più. Non credi ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.