えびしブログ

〜サーバーは魔法で動いているわけではない〜

favのタグ付け管理 メモ

Twitterのお気に入りをリマインドのために使うことがあるので、
タグ付け管理したいなーと思って作りました。
Java(Play!)です。め、めんどくさかっt…ごほん。
ローカルでしか動いていないのでサーバーをなんとかしないといけません…。


直さなければならない点をメモメモ。

  • 同じタグは付けられないようにする
  • タグを削除できるようにする

jQueryたのしい!!!!
以下ハマったところを覚え書き。
いつまでも自分だけが得をする日記しかかけません…

クリックしたらsubmitする(GET)

タグ名をクリックしたら、そのタグが付けられたお気に入りの一覧を表示します。

  • JavaScript(test.js)
    • ※submit処理の部分だけを抜き出しています
$('.tag').each(
	function(){
	if('[]'==$(this).text())$(this).hide();
	}
	);
$('.tag').click(
		function(){
			$(this).attr("action","/index");
			$(this).submit();
		}
		);
$('.tag').hover(
		function () {
			$(this).addClass("point");
			},
		function () {
			$(this).removeClass("point");
			}
		);
  • Java(Application.java
    • ※submit処理の部分だけを抜き出しています(カオス…!!!)
    • Twitterインスタンスは取得済み
    • クエリの書き方をいまいち理解してないです…
package controllers;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import models.FavData;
import models.TagData;
import play.mvc.*;
import play.mvc.Scope.Params;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.http.AccessToken;
import twitter4j.http.RequestToken;

public class Application extends Controller {
//略
	private static int personalId = 0;

//略
	public static void index(String tag,String statusid,String tagselect,String clicktag){
//略
		personalId = twitter.getId();
		if(clicktag!=null){
			List<TagData> newtaglist = TagData.find("personalId like ?",personalId).fetch();
			List<FavData> favdatas = FavData.find("personalId like ?",personalId).fetch();
			List<FavData> newfavdatas = new ArrayList<FavData>();
			for(FavData fav:favdatas){
					for(int i = 0;fav.tag[i]!=null;i++){
					if(fav.tag[i].equals(clicktag)){
						newfavdatas.add(fav);
					}
				}
			}
			System.out.println(newfavdatas.size());
			render(newtaglist,newfavdatas);
		}
//略
	}
}
package models;

import javax.persistence.Entity;

import play.db.jpa.Model;

@Entity
public class FavData extends Model{

	private static final long serialVersionUID = 1L;
	public String imageURL;
	public String name;
	public String text;
	public long statusId;
	public int personalId;
	public String[] tag = new String[10];

	public FavData(String imageURL,String name,String text,long statusId,int personalId,String tag){
		this.imageURL = imageURL;
		this.name = name;
		this.text = text;
		this.statusId = statusId;
		this.personalId = personalId;
		this.tag[0] = tag;
	}
}
package models;

import javax.persistence.Entity;

import play.db.jpa.Model;

@Entity
public class TagData extends Model{

	private static final long serialVersionUID = 1L;
	public int personalId;
	public String tagname;
	public int size;

	public TagData(int personalId,String tagname,int size){
		this.personalId = personalId;
		this.tagname = tagname;
		this.size = size;
	}
}
  • HTML(index.html)
    • タグ表示部分をなんとかしたいです…!
#{extends 'main.html' /}
#{set title:'Home' /}
#{set 'moreScripts'}
<script src="@{'/public/javascripts/test.js'}" type="text/javascript" ></script>
#{/set}
<h1>MyFavorites</h1>
<div class="tag_list">
#{list items:newtaglist, as:'tag'}
<form class="tag"><input type="hidden" name="clicktag" value="${tag.tagname}" />${tag.tagname}(${tag.size})</form>
#{/list}
</div>
<table class="cell_table">
#{list items:newfavdatas, as:'fav'}
	<tr class="cell">
		<td class="image"><img src="${fav.imageURL}" border="0"/></td>
		<td><a class="screen_name" href="http://twitter.com/${fav.name}" target="_blank">${fav.name}</a><br />
		${fav.text}<br />
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[0]}" />[${fav.tag[0]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[1]}" />[${fav.tag[1]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[2]}" />[${fav.tag[2]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[3]}" />[${fav.tag[3]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[4]}" />[${fav.tag[4]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[5]}" />[${fav.tag[5]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[6]}" />[${fav.tag[6]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[7]}" />[${fav.tag[7]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[8]}" />[${fav.tag[8]}]</form>
		<form class="tag"><input type="hidden" name="clicktag" value="${fav.tag[9]}" />[${fav.tag[9]}]</form>
		<div class="create_tag">タグをつける<span class="status_id">${fav.statusId}</span></div></td>
		<td>×<br /></td>
	</tr>
#{/list}
</table>
<div><a href="@{Application.logout}">ログアウト</a></div>
  • CSS(main.css
    • ※submit処理部分のみ
.tag{
	color:#52b7cf;
	display:inline;
}

.point{
	cursor:pointer;
}
時間メモ

7日 Java(Play!)、jQuery(10H)