<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CodePlay &#187; jquery</title>
	<atom:link href="http://codeplay.hu/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeplay.hu</link>
	<description>Kitaláljuk, lefejlesztjük, telepítjük</description>
	<lastBuildDate>Wed, 21 Dec 2011 14:48:53 +0000</lastBuildDate>
	<language>hu</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Displaytag detail megjelenítés jQuery-vel</title>
		<link>http://codeplay.hu/developer/2010/07/displaytag-detail-megjelenites-jquery-vel/</link>
		<comments>http://codeplay.hu/developer/2010/07/displaytag-detail-megjelenites-jquery-vel/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 23:01:00 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=33</guid>
		<description><![CDATA[Projektjeinkben táblázatos megjelenítéshez általában a DisplayTag nevezetű tag könyvtárat használjuk, mert jól összefér a használt Struts2 és Spring keretrendszerekkel, és egyszerűen formázható, programozható. Szerettem volna azonban kicsit többet, mint amit tud, mégpedig ha részletes adatokat tudna megjeleníteni egy legördülő sorban jQuery segítségével. Ez arra jó, ha egy sorban nem szeretnénk minden adatot bezsúfolni, mert nem [...]]]></description>
			<content:encoded><![CDATA[<p>Projektjeinkben táblázatos megjelenítéshez általában a <a href="http://displaytag.sourceforge.net">DisplayTag</a> nevezetű tag könyvtárat használjuk, mert jól összefér a használt <a href="http://struts.apache.org/2.x/index.html">Struts2</a> és <a href="http://www.springsource.org">Spring</a> keretrendszerekkel, és egyszerűen formázható, programozható. Szerettem volna azonban kicsit többet, mint amit tud, mégpedig ha részletes adatokat tudna megjeleníteni egy legördülő sorban <a href="http://jquery.com">jQuery</a> segítségével. Ez arra jó, ha egy sorban nem szeretnénk minden adatot bezsúfolni, mert nem mindig érdekli a felhasználót, de azért néha szeretné megtekinteni a részletes adatokat.</p>
<p><span id="more-33"></span></p>
<p>Tegnap megvalósítottam az ötletet. A feladat egy olyan jQuery plugin létrehozása volt, amely úgy tudja a detail megjelenítést megoldani, hogy ne kelljen a displaytag forrásába belepiszkálni. Ez elsőre azért tűnt bonyolultnak, mert általában az ilyen megjelenítők úgy oldják meg a feladatot, hogy már eleve legenerálnak egy plusz, nem látható sort a táblázatba, ami akkor válik láthatóvá, ha megnyomjuk a részletek megjelenítésére szolgáló ikont. Végül sikerült egy olyan plugint létrehozni, ami nem csak a displaytag könyvtárral működik együtt, hanem egy tetszőleges táblázattal, így bármely olyan kész komponenssel használható, amibe nem tudunk vagy nem szeretnénk belehekkelni egy plusz TR-t.</p>
<p>Ha nem érdekel a leírás, innen letöltheted a plugint: <a href="http://codeplay.hu/wp-content/uploads/2010/09/jquery.displaytagdetail.zip">jquery.displaytagdetail.zip</a></p>
<h3>Displaytag felhasználásával</h3>
<p>Az alapot egy displaytag definíció szolgálja a JSP fájlban. Így néz ki általában:</p>
<pre class="brush:xml">&lt;display:table name="paginatedList" id="auditlogList" sort="external" requestURI="auditlogList.action"&gt;
  &lt;display:setProperty name="pagination.sort.param" value="paginatedList.sortCriterion" /&gt;
  &lt;display:setProperty name="pagination.sortdirection.param" value="paginatedList.sortDirectionName" /&gt;
  &lt;display:setProperty name="pagination.pagenumber.param" value="paginatedList.pageNumber" /&gt;
  &lt;display:column sortable="true" property="idAuditlog" title="id"/&gt;
  &lt;display:column sortable="true" property="creationTime" title="Időpont"/&gt;
  &lt;display:column sortable="true" property="priority" title="Prioritás"/&gt;
  &lt;display:column sortable="true" property="username" title="Felhasználó"/&gt;
&lt;/display:table&gt;
</pre>
<h3>HTML táblázat</h3>
<p>A fentebbi tag a következő HTML kódot generálja le, de ez előállítható akár PHP-ból is</p>
<pre class="brush: xml;">&lt;table id="auditlogList"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;id&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;th&gt;User&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2010-07-02 13:27:07.0&lt;/td&gt;
&lt;td&gt;NORMAL&lt;/td&gt;
&lt;td&gt;root@valami-asdf.hu&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2010-07-02 14:04:28.0&lt;/td&gt;
&lt;td&gt;NORMAL&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</pre>
<h3>jQuery plugin</h3>
<p>Létrehoztam a <strong>displaytagdetail</strong> plugin forrását, amit aztán Javascript-ként beillesztettem az oldal forrásába.</p>
<pre class="brush: js">jQuery.fn.displaytagdetail = function(button, detailClass, imgUp, imgDown, speed) {
		$(this).find(button).click( function() {
			tr = $(this).parents("tr");
			if (tr.next().hasClass(detailClass)) {
				tr.next().find("div").slideUp(function() {
					tr.next().remove();
				  });
				$(this).find("img:first").attr("src",imgDown);
			} else {
				tr.after("&lt;tr class='" + detailClass + "'&gt;&lt;td colspan=1000&gt;&lt;div style='display:none'&gt;" +
						$(this).next("div").html() +
						"&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;");
				tr.next().addClass(tr.attr("class"));
				$(this).find("img:first").attr("src",imgUp);
				tr.next().find("div").slideDown(speed);
			}
		});
	};
</pre>
<p>Paraméterként a következőket kell megadni:</p>
<ul>
<li>A detail gomb class neve (‘.’-el kezdőtik)</li>
<li>A detail div osztálya</li>
<li>Záró ikon</li>
<li>Nyitó ikon</li>
<li>Animáció sebessége</li>
</ul>
<p>Példa jQuery hívás:</p>
<pre class="brush: js">	&lt;script type="text/javascript"&gt;
		$(function() {
			$("#auditlogList").displaytagdetail(".detail_button","detail","images/arrow_up.png","images/arrow_down.png","slow");
		});
	&lt;/script&gt;
</pre>
<h3>Módosított displaytag a JSP-ben</h3>
<p>A tag-ben létrehoztam egy plusz oszlopot, ami tartalmazza a részleteket tartalmazó div-et és a lenyitó gombot</p>
<pre class="brush:xml" style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">&lt;display:table name="paginatedList" id="auditlogList" sort="external" requestURI="auditlogList.action"&gt;
  &lt;display:setProperty name="pagination.sort.param" value="paginatedList.sortCriterion" /&gt;
  &lt;display:setProperty name="pagination.sortdirection.param" value="paginatedList.sortDirectionName" /&gt;
  &lt;display:setProperty name="pagination.pagenumber.param" value="paginatedList.pageNumber" /&gt;
  &lt;display:column&gt;
    &lt;a&gt;&lt;img src="images/arrow_down.png"/&gt;&lt;/a&gt;
    &lt;div style="display:none"&gt;
      &lt;strong&gt;Komponens:&lt;/strong&gt;&lt;br/&gt;
      ${auditlogList.component}&lt;br/&gt;&lt;br/&gt;
      &lt;strong&gt;Log:&lt;/strong&gt;&lt;br/&gt;
      ${auditlogList.log}
    &lt;/div&gt;
  &lt;/display:column&gt;
  &lt;display:column sortable="true" property="idAuditlog" title="id"/&gt;
  &lt;display:column sortable="true" property="creationTime" title="Időpont"/&gt;
  &lt;display:column sortable="true" property="priority" title="Prioritás"/&gt;
  &lt;display:column sortable="true" property="username" title="Felhasználó"/&gt;
&lt;/display:table&gt;</pre>
<h3>Módosított HTML táblázat</h3>
<p>A részleteket tartalmazó generált táblázat így néz ki.</p>
<pre class="brush: xml">
<div id="_mcePaste">&lt;table id="auditlogList"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;
&lt;th&gt;id&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;th&gt;User&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a&gt;&lt;img src="images/arrow_down.png" alt="" /&gt;&lt;/a&gt;
&lt;div style="display: none;"&gt;
&lt;strong&gt;Komponens:&lt;/strong&gt;
admin.UserBo.getUserByEmailForLogin
&lt;strong&gt;Log:&lt;/strong&gt;
java.lang.String=root
&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2010-07-02 13:27:07.0&lt;/td&gt;
&lt;td&gt;NORMAL&lt;/td&gt;
&lt;td&gt;root&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a&gt;&lt;img src="images/arrow_down.png" alt="" /&gt;&lt;/a&gt;
&lt;div style="display: none;"&gt;
&lt;strong&gt;Komponens:&lt;/strong&gt;
admin.UserRequestBo.saveUserRequest
&lt;strong&gt;Log:&lt;/strong&gt;
Log entry
&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2010-07-02 14:04:28.0&lt;/td&gt;
&lt;td&gt;NORMAL&lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</div>
</pre>
<h3>Végül</h3>
<p>Ha mindent jól csináltunk, akkor a táblázatunkban lenyitható és bezárható egy sor a kis ikonnal.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/developer/2010/07/displaytag-detail-megjelenites-jquery-vel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

