tapestry workshop

This commit is contained in:
robin 2012-05-24 12:52:32 +08:00
parent e54cea564b
commit 499839d0e6
12 changed files with 190 additions and 69 deletions

View File

@ -7,12 +7,14 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadServlet extends HttpServlet {
public class GitServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getOutputStream().println("hello world");
resp.getOutputStream().println(req.getServletPath());
}
}

View File

@ -84,7 +84,7 @@ public class Plugin extends AbstractPlugin {
context.setInitParameter(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM, Plugin.class.getPackage().getName());
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
context.addServlet(DownloadServlet.class, "/download/*");
context.addServlet(GitServlet.class, "*.git");
}
},

View File

@ -0,0 +1,28 @@
package com.pmease.commons.product.model;
import javax.persistence.Entity;
@Entity
public class Repository {
private String name;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}

View File

@ -1,20 +1,9 @@
package com.pmease.commons.product.model;
import javax.persistence.Column;
import javax.persistence.Entity;
public class User {
import com.pmease.commons.hibernate.AbstractEntity;
@Entity
public class User extends AbstractEntity {
private static final long serialVersionUID = 1L;
@Column(unique = true, nullable = false)
private String name;
private String fullName;
private String email;
public String getName() {
@ -25,14 +14,6 @@ public class User extends AbstractEntity {
this.name = name;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getEmail() {
return email;
}

View File

@ -1,13 +0,0 @@
package com.pmease.commons.product.pages;
import java.util.List;
import com.google.common.collect.ImmutableList;
public class AnotherPage {
public List getElements() {
return ImmutableList.of("4", "5", "6");
}
}

View File

@ -6,48 +6,73 @@ import java.util.List;
import javax.inject.Inject;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.services.ComponentSource;
import com.pmease.commons.hibernate.dao.GeneralDao;
import com.pmease.commons.product.Counter;
import com.pmease.commons.product.model.Repository;
import com.pmease.commons.product.model.User;
public class Index {
@Persist
@Property
private List<Counter> counters;
@InjectComponent
private Zone zone;
@Property
private Counter counter;
private User user;
@Property
private Repository repository;
@Inject
private GeneralDao dao;
private ComponentSource componentSource;
void setupRender() {
if (counters == null) {
counters = new ArrayList<Counter>();
counters.add(new Counter());
counters.add(new Counter());
}
@InjectComponent
private Zone myZone;
public List<User> getUsers() {
List<User> users = new ArrayList<User>();
User user = new User();
user.setName("robin");
user.setEmail("robin@pmease.com");
users.add(user);
user = new User();
user.setName("steve");
user.setEmail("steve@pmease.com");
users.add(user);
return users;
}
void onActionFromModify() {
System.out.println(dao.getReference(User.class, 1L).getEmail());
void onActivate(String userName) {
user = new User();
user.setName(userName);
}
Object onActionFromIncrease(int index) {
counter = counters.get(index);
counter.increase();
return zone;
void onActivate(String userName, String repositoryName) {
user = new User();
user.setName(userName);
repository = new Repository();
repository.setName(repositoryName);
}
public String getZoneId() {
return zone.getClientId();
public UserViewer getUserViewer() {
UserViewer viewer = (UserViewer) componentSource.getPage(UserViewer.class);
viewer.setUser(user);
return viewer;
}
public RepositoryViewer getRepositoryViewer() {
RepositoryViewer viewer = (RepositoryViewer) componentSource.getPage(RepositoryViewer.class);
viewer.setUser(user);
viewer.setRepository(repository);
return viewer;
}
Object onActionFromEmailLink(String userName) {
user = new User();
user.setName(userName);
user.setEmail(userName + "@pmease.com");
return myZone;
}
}

View File

@ -1,10 +1,30 @@
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter">
<head>
<title>Workshop</title>
</head>
<body>
<t:loop source="counters" value="counter" index="var:index">
<t:zone t:id="zone">${counter.value}</t:zone>
<t:actionlink t:id="increase" t:zone="prop:zoneId" t:context="var:index">increase</t:actionlink>
</t:loop>
<img src="${asset:ok.gif}"></img>
<t:actionlink t:id="modify">modify</t:actionlink>
<t:if test="user">
<t:if test="repository">
<t:delegate to="repositoryViewer"/>
<p:else>
<t:delegate to="userViewer"/>
</p:else>
</t:if>
<p:else>
<t:grid source="users" row="user">
<p:nameCell>
<t:pagelink page="index" context="user.name">${user.name}</t:pagelink>
</p:nameCell>
<p:emailCell>
<t:jquery.dialogajaxlink t:id="emailLink" t:dialog="myDialog" t:zone="myZone" context="user.name">open</t:jquery.dialogajaxlink>
</p:emailCell>
</t:grid>
</p:else>
</t:if>
<t:jquery.dialog t:clientId="myDialog">
<t:zone t:id="myZone" id="myZone">
${user.email}
</t:zone>
</t:jquery.dialog>
</body>
</html>

View File

@ -0,0 +1,28 @@
package com.pmease.commons.product.pages;
import com.pmease.commons.product.model.Repository;
import com.pmease.commons.product.model.User;
public class RepositoryViewer {
private User user;
private Repository repository;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Repository getRepository() {
return repository;
}
public void setRepository(Repository repository) {
this.repository = repository;
}
}

View File

@ -1,3 +1,3 @@
<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter">
<t:commons.viewer elements="elements" value="var:value">${var:value}</t:commons.viewer>
${user.name} - ${repository.name}
</t:container>

View File

@ -0,0 +1,42 @@
package com.pmease.commons.product.pages;
import java.util.ArrayList;
import java.util.List;
import org.apache.tapestry5.annotations.Property;
import com.pmease.commons.product.model.Repository;
import com.pmease.commons.product.model.User;
public class UserViewer {
private User user;
@SuppressWarnings("unused")
@Property
private Repository repository;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Repository> getRepositories() {
List<Repository> repositories = new ArrayList<Repository>();
Repository repository = new Repository();
repository.setName("QuickBuild");
repository.setDescription("QuickBuild Trunk");
repositories.add(repository);
repository = new Repository();
repository.setName("Gitop");
repository.setDescription("Gitop Trunk");
repositories.add(repository);
return repositories;
}
}

View File

@ -0,0 +1,8 @@
<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter">
<div>${user.name}</div>
<t:grid source="repositories" row="repository">
<p:nameCell>
<t:pagelink page="index" context="[user.name, repository.name]">${repository.name}</t:pagelink>
</p:nameCell>
</t:grid>
</t:container>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB