GUJ
Notícias, artigos e o maior fórum brasileiro sobre Java
home
fórum
notícias
tópicos recentes
empregos
artigos
Bem-vindo ao GUJ.
Crie seu login
, ou digite-o para logar no site.
Usuário:
Senha:
DisplayTag [Concluído]
Índice dos Fóruns
»
Desenvolvimento Web
Autor
Mensagem
19/07/2010 17:34:34
Assunto:
DisplayTag [Concluído]
thokk
Virtual Machine Man
Membro desde: 18/10/2006 17:04:08
Mensagens: 521
Offline
Boa tarde,
Gostaria de saber o porque a aplicação está reclamando desta tag:
displaytag.tld dentro do web-inf
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0-b3</tlib-version> <jsp-version>1.2</jsp-version> <short-name>display</short-name> <uri>http://displaytag.sf.net</uri> <display-name>Display *: Tag Library</display-name> <description>The display tag library is an open source suite of custom tags that provide high level web presentation patterns which will work in a MVC model, and provide a significant amount of functionality while still being simple and straight-forward to use. The primary tag in the library is the Table tag.</description> <tag> <name>table</name> <tag-class>org.displaytag.tags.TableTag</tag-class> <tei-class>org.displaytag.tags.TableTagExtraInfo</tei-class> <body-content>JSP</body-content> <display-name>table</display-name> <description>Displays a list in an html table, formatting each item in the list according to the Column tags nested inside of this tag. Use the list attribute to indicate the Collection of data, in some scope, that the tag should operate on. Supports the export of the list data to alternative formats such as CSV, Excel, and XML. The contents of the list can be sorted, and the list can be broken into individual pages for display. If you use this tag in Struts, or in some other framework where the page is included via a jsp:include, you should use the requestURI attribute to indicate where tag generated links should point. </description> <!-- Cannot use VARIABLES at all when one of them (rownum) has a dynamic name :( <variable> <name-from-attribute>id</name-from-attribute> <variable-class>java.lang.Object</variable-class> <scope>NESTED</scope> <description>This implicit variable holds the value of the current row object (the results of iterator#next).</description> </variable> I think this may have to get yanked. I don't think we should be changing the name of the scripting variable behind the back of the container. Best left undoc'd and experimental for now; should just be rolled into a LoopStatus class. <variable> <name-from-attribute>id</name-from-attribute> <variable-class>java.lang.Integer</variable-class> <scope>NESTED</scope> <description>This implicit variable holds the row number of the current row object. Note that the name is actually not directly from id, but is id + '_rowNum'</description> </variable> <variable> <name-given>mediaType</name-given> <variable-class>org.displaytag.properties.MediaTypeEnum</variable-class> <scope>NESTED</scope> <description>Holds the media type of the current request. Used by ColumnTag to decide whether or not it should display.</description> </variable> --> <attribute> <name>list</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>Reference to the object used as source for the table. Can be an expression like requestScope.object.property . You must define either the name attribute or the list attribute. List is suggested.</description> </attribute> <attribute> <name>name</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>reference to the object used as source for the table. Can be an expression like requestScope.object.property. In the EL version of the taglibrary this must be an EL expression which points to the source object. </description> </attribute> <attribute> <name>property</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated in displaytag 1.0. Use list.property in "name" attribute. Not supported in the EL version of the tag.</description> </attribute> <attribute> <name>scope</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated in displaytag 1.0. Use "pageScope.", "requestScope.", "sessionScope.", "applicationScope." prefixes in name. Not supported in the EL version of the tag.</description> </attribute> <attribute> <name>length</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>number of records to be shown</description> </attribute> <attribute> <name>offset</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>index of the first record to be shown</description> </attribute> <attribute> <name>pagesize</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>number of records in a page</description> </attribute> <attribute> <name>decorator</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>Fully qualified class name for a TableDecorator. Use a TableDecorator to provide custom operations against the whole list, such as computing totals. Must extend org.displaytag.decorator.TableDecorator. </description> </attribute> <attribute> <name>requestURI</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>When the present, links for sorting, exports, and paging are formed by adding any tag generated parameters to the value of requestURI attribute.</description> </attribute> <attribute> <name>width</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>style</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute</description> </attribute> <attribute> <name>class</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute</description> </attribute> <attribute> <name>styleClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated: use "class"</description> </attribute> <attribute> <name>border</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html pass through attribute. Use css "border"</description> </attribute> <attribute> <name>cellspacing</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute</description> </attribute> <attribute> <name>cellpadding</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute. Better using "padding" css attribute in style or class</description> </attribute> <attribute> <name>align</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>background</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>bgcolor</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>frame</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <attribute> <name>height</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>hspace</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>rules</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute. </description> </attribute> <attribute> <name>summary</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute</description> </attribute> <attribute> <name>vspace</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>export</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>enable/disable export. Valid values are true or false </description> </attribute> <attribute> <name>id</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> <description>An implicit variable of this name will be created and placed into NESTED scope. The object is also added to pageContext under this name.</description> </attribute> <attribute> <name>sort</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>Use 'page' if you want to sort only visible records, or 'list' if you want to sort the full list</description> </attribute> <attribute> <name>defaultsort</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>int</type> <description>The index of the column that will be used by default for sorting</description> </attribute> <attribute> <name>defaultorder</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> <description>The default order for the sorted column. Valid values are "ascending" (default) or "descending"</description> </attribute> <example> <display:table name="someList" export="true" id="row" requestURI="MyAction.do"> <display:column sortable="true" title="ID"> <c:out value="${row.id}"/> </display:column> <display:column property="email" autolink="true"/> <display:column property="description" title="Comments"/> </display:table> </example> </tag> <tag> <name>column</name> <tag-class>org.displaytag.tags.ColumnTag</tag-class> <body-content>JSP</body-content> <display-name>column</display-name> <description>Displays a property of a row object inside a table. MUST be nested inside of a Table tag. The value displayed will be the results of a decorator (if any); else the property named by the 'property' attribute; or if the 'property' attribute is null, then the results of evaluating the JSP body of the tag. </description> <attribute> <name>property</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>name of the property in the bean specified in the parent table tag (via the "name" attribute) mapped to this column</description> </attribute> <attribute> <name>title</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>title of the column (text for the th cell)</description> </attribute> <attribute> <name>nulls</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>By default, null values don't appear in the list. By setting 'nulls' to 'true', then null values will appear as "null" in the list (mostly useful for debugging). Defaults to 'false'. </description> </attribute> <attribute> <name>sort</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated: use "sortable"</description> </attribute> <attribute> <name>sortable</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>Set to 'true' to make the column sortable. Defaults to 'false'.</description> </attribute> <attribute> <name>autolink</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>boolean</type> <description>Automatically hyperlink URLs and email addresses that appear in the column. Defaults to 'false'.</description> </attribute> <attribute> <name>media</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>Use this attribute to keep a column from being output during an export. The column will only render for the named media type(s) - it won't be added to the table if the current request media is not supported. Can be any space separated combination of 'html', 'csv', 'xml', 'all', or 'excel'. Defaults to 'all'. See the export page in the example webapp for more details.</description> </attribute> <attribute> <name>href</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>The base URL used to construct the dynamic link. If this attribute is provided, then the data that is shown for this column is wrapped inside a <a href> tag with the url provided through this attribute. Typically you would use this attribute along with one of the struts-like param attributes (param*) to create a dynamic link so that each row creates a different URL based on the data that is being viewed. </description> </attribute> <attribute> <name>paramId</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> The name of the request parameter that will be dynamically added to the generated href URL. The corresponding value is defined by the paramProperty and (optional) paramName attributes, optionally scoped by the paramScope attribute. </description> </attribute> <attribute> <name>paramName</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified. If paramName is omitted, then it is assumed that the current object being iterated on is the target bean. </description> </attribute> <attribute> <name>paramProperty</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated - use Expressions in paramName. The name of a property of the bean specified by the paramName attribute (or the current object being iterated on if paramName is not provided), whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this href URL. </description> </attribute> <attribute> <name>paramScope</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> @deprecated - use Expressions in paramName. The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched. If paramName is not provided, then the current object being iterated on is assumed to be the target bean. </description> </attribute> <attribute> <name>maxLength</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> If this attribute is provided, then the column's displayed is limited to this number of characters. An elipse (...) is appended to the end if this column is linked, and the user can mouseover the elipse to get the full text. </description> </attribute> <attribute> <name>maxWords</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> If this attribute is provided, then the column's displayed is limited to this number of words. An elipse (...) is appended to the end if this column is linked, and the user can mouseover the elipse to get the full text. </description> </attribute> <attribute> <name>width</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated; html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>class</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute; use this instead of directly coding presentational atttributes.</description> </attribute> <attribute> <name>styleClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated: use "class"</description> </attribute> <attribute> <name>headerClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>"class" html attribute added only for header cells.</description> </attribute> <attribute> <name>headerStyleClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated: use "headerClass"</description> </attribute> <attribute> <name>style</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <attribute> <name>align</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>background</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>bgcolor</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>height</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>nowrap</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>valign</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>@deprecated html attribute. Use "style" or "class" to set presentational attributes using css.</description> </attribute> <attribute> <name>group</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> The grouping level (starting at 1 and incrementing) of this column (indicates if successive contain the same values, then they should not be displayed). The level indicates that if a lower level no longer matches, then the matching for this higher level should start over as well. If this attribute is not included, then no grouping is performed. </description> </attribute> <attribute> <name>decorator</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>The fully qualified class name of a class that should be used to "decorate" the underlying object being displayed. The class should implement org.displaytag.decorator.ColumnDecorator. If a decorator is specified for the entire table, then this decorator will decorate that decorator. </description> </attribute> </tag> <tag> <name>setProperty</name> <tag-class>org.displaytag.tags.SetPropertyTag</tag-class> <body-content>JSP</body-content> <display-name>setProperty</display-name> <description>Sets the indicated property on the enclosing Table tag. MUST be nested within a Table tag. As an alternative, you may create a property file that holds sitewide defaults; see the configuration documentation or the DisplayPropertiesLoaderServlet javadoc for information.</description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description>The name of the property to set on the enclosing Table tag.</description> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> <description>The value to which the property is set. You can also set the property value in the tag body.</description> </attribute> <example> <display:setProperty name="paging.banner.placement" value="bottom" /> or <display:setProperty name="paging.banner.placement">bottom</display:setProperty> </example> </tag> <tag> <name>footer</name> <tag-class>org.displaytag.tags.TableFooterTag</tag-class> <body-content>JSP</body-content> <display-name>footer</display-name> <description>Tag wich should be nested into a table tag to provide a custom table footer. The body of the tag is outputted as is in the generated table in the tfoot section.</description> <example> <display:table name="someList"> <display:column property="mail"/> <display:column property="total"/> <display:footer> <tr> <td>total:</td> <td><c:out value="${something}" /></td> <tr> </display:footer> </display:table> </example> </tag> <tag> <name>caption</name> <tag-class>org.displaytag.tags.CaptionTag</tag-class> <body-content>JSP</body-content> <display-name>caption</display-name> <description> Simple tag which mimics the html caption tag. Use it inside a table tag to display a caption. </description> <attribute> <name>style</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <attribute> <name>class</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <attribute> <name>id</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <attribute> <name>title</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <attribute> <name>lang</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <attribute> <name>dir</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description>html pass through attribute.</description> </attribute> <example> <display:table name="someList"> <display:column property="mail"/> <display:column property="total"/> <display:caption>This is the table caption</display:caption> </display:table> </example> </tag> </taglib>
Web.xml
<taglib> <taglib-uri>http://displaytag.sf.net</taglib-uri> <taglib-location>/WEB-INF/displaytag.tld</taglib-location> </taglib>
Erro que ocorre: display:table não é um tag registrada neste namespace.
Alguém sabe o que pode ser?
This message was edited 1 time. Last update was at 20/07/2010 16:14:59
Na vida temos um dia único e feliz. Este dia foi quando conheci minha esposa!!!!
20/07/2010 11:11:24
Assunto:
Re:DisplayTag
thokk
Virtual Machine Man
Membro desde: 18/10/2006 17:04:08
Mensagens: 521
Offline
Alguém pode me dar um help???
Na vida temos um dia único e feliz. Este dia foi quando conheci minha esposa!!!!
20/07/2010 16:16:06
Assunto:
Re:DisplayTag [Concluído]
thokk
Virtual Machine Man
Membro desde: 18/10/2006 17:04:08
Mensagens: 521
Offline
Foi resolvido, de onde eu tive que criar um arquivo .properties onde coloca todos os paths dos jar que ele usa.
Na vida temos um dia único e feliz. Este dia foi quando conheci minha esposa!!!!
21/07/2010 14:52:00
Assunto:
Re:DisplayTag [Concluído]
Guevara
GUJ Master
Membro desde: 24/02/2009 17:56:09
Mensagens: 1023
Offline
Seria o displaytag.properties dentro da /src?
Ai vai um exemplo traduzido para ptBR:
basic.empty.showtable=true basic.show.header=true # page | list sort.amount=list export.amount=list export.decorated=true paging.banner.group_size=8 paging.banner.placement=top css.tr.even=even css.tr.odd=odd css.th.sorted=sorted css.th.ascending=order1 css.th.descending=order2 css.table=its css.th.sortable=sortable # factory classes for extensions #factory.requestHelper=org.displaytag.util.DefaultRequestHelperFactory # factory class for decorators #factory.decorator=org.displaytag.decorator.DefaultDecoratorFactory # locale provider (Jstl provider by default) #locale.provider=org.displaytag.localization.I18nJstlAdapter # locale.resolver (nothing by default, simply use locale from request) #locale.resolver= export.types=csv excel xml pdf rtf export.csv.class=org.displaytag.export.CsvView export.xml.class=org.displaytag.export.XmlView export.excel.class=org.displaytag.export.ExcelView export.pdf.class=org.displaytag.export.PdfView export.rtf.class=org.displaytag.export.DefaultRtfExportView export.csv=true #export.csv.label=<span class="export csv">CSV </span> export.csv.include_header=false export.csv.filename=export.csv export.excel=true #export.excel.label=<span class="export excel">Excel </span> export.excel.include_header=true export.excel.filename=export.xls export.xml=true #export.xml.label=<span class="export xml">XML </span> export.xml.filename=export.xml export.pdf=true #export.pdf.label=<span class="export pdf">PDF </span> export.pdf.include_header=true export.pdf.filename=export.pdf export.rtf=true #export.rtf.label=<span class="export rtf">RTF </span> export.rtf.include_header=true export.rtf.filename=export.rtf # messages basic.msg.empty_list=Nada encontrado para ser exibido. basic.msg.empty_list_row=<tr class="empty"><td colspan="{0}">Nada encontrado para ser exibido.</td></tr> error.msg.invalid_page=página inválida export.banner=<div class="exportlinks">Salvar Como: {0}</div> export.banner.sepchar= | paging.banner.item_name=item paging.banner.items_name=itens paging.banner.no_items_found=<span class="pagebanner">{0} não encontrado.</span> paging.banner.one_item_found=<span class="pagebanner">Um {0} encontrado.</span> paging.banner.all_items_found=<span class="pagebanner">{0} {1} encontrados, exibindo todos {2}.</span> paging.banner.some_items_found=<span class="pagebanner">{0} {1} encontrados, exibindo de {2} à {3}.</span> paging.banner.full=<span class="pagelinks">[<a href="{1}">Primeiro</a>/<a href="{2}">Anterior</a>] {0} [<a href="{3}">Próximo</a>/<a href="{4}">Último</a>]</span> paging.banner.first=<span class="pagelinks">[Primeiro/Anterior] {0} [<a href="{3}">Próximo</a>/<a href="{4}">Último</a>]</span> paging.banner.last=<span class="pagelinks">[<a href="{1}">Primeiro</a>/<a href="{2}">Anterior</a>] {0} [Próximo/Último]</span> paging.banner.onepage=<span class="pagelinks">{0}</span> paging.banner.page.selected=<strong>{0}</strong> paging.banner.page.link=<a href="{1}" title="Vai para a página {0}">{0}</a> paging.banner.page.separator=, \ # external sort and pagination pagination.sort.param=sort pagination.sortdirection.param=dir pagination.pagenumber.param=page pagination.searchid.param=searchid pagination.sort.asc.value=asc pagination.sort.desc.value=desc pagination.sort.skippagenumber=true
Analista de Sistemas e desenvolvedor WEB Java e Python
http://twitter.com/eguevara2012
21/07/2010 16:16:30
Assunto:
Re:DisplayTag [Concluído]
thokk
Virtual Machine Man
Membro desde: 18/10/2006 17:04:08
Mensagens: 521
Offline
Sim.
Na vida temos um dia único e feliz. Este dia foi quando conheci minha esposa!!!!
Índice dos Fóruns
»
Desenvolvimento Web
Ir para:
Selecione um Fórum
Notícias
Assuntos gerais (Off-topic)
MundoJ - Artigos, Notícias e Debates
Artigos e Tutoriais
Java Básico
Java Avançado
Ferramentas, Frameworks e Utilitários
Desenvolvimento Web
Interface Gráfica
Google Android e Java Micro Edition (ME)
Certificação Java
Persistência: Hibernate, JPA, JDBC e outros
Java Enterprise Edition (Java EE)
Frameworks e Bibliotecas brasileiros
RIA - Flex, JavaFX e outros
Arquitetura de Sistemas
Metodologias de Desenvolvimento e Testes de Software
JavaScript
Ruby & Ruby on Rails
Outras Linguagens
Powered by
JForum 2.1.8
©
JForum Team