<t:grid source="users" row="user" model="myModel" t:inplace="true"
rowIndex="currentIndex" rowsPerPage="10">
<p:firstnameCell>
<div t:id="firstName" t:type="jquery/inPlaceEditor"
value="user.firstName" t:context="${currentIndex}" t:options="optionsJSON"/>
</p:firstnameCell>
<p:lastnameCell>
<div t:id="lastName" t:type="jquery/inPlaceEditor"
value="user.lastName" t:context="${currentIndex}" t:options="optionsJSON"/>
</p:lastnameCell>
</t:grid>
<t:zone t:id="updateZone" id="updateZone" visible="false">
<div>
Last in place editor update is related to <br/>
<t:beandisplay object="user"/>
</div>
</t:zone>
public class DocsInPlaceEditor
{
@Property
private User user;
@Property
private int currentIndex;
@Property
@Persist
private List<User> users;
@Inject
private BeanModelSource _beanModelSource;
@Inject
private ComponentResources _componentResources;
@Inject
private Request request;
void setupRender() {
users = createUsers(50);
}
public BeanModel getMyModel(){
BeanModel myModel = _beanModelSource.createDisplayModel(User.class,
_componentResources.getMessages());
myModel.add("action", null);
myModel.include("firstName", "lastName", "action");
myModel.get("firstName").sortable(false);
myModel.get("lastName").label("Surname");
return myModel;
}
private User createUser(int i)
{
User u = new User();
u.setAge(i);
u.setFirstName("Humpty" + i + 10);
u.setLastName("Dumpty" + i + 200);
return u;
}
private List<User> createUsers(int number)
{
List<User> users = new ArrayList<User>();
for (int i = 0; i < number; i++)
{
users.add(createUser(i));
}
return users;
}
@OnEvent(component = "lastName", value = InPlaceEditor.SAVE_EVENT)
void setLastName(Long id, String value)
{
User user = (User)users.get(id.intValue());
user.setLastName(value);
}
@OnEvent(component = "firstName", value = InPlaceEditor.SAVE_EVENT)
void setFirstName(Long id, String value)
{
User user = (User)users.get(id.intValue());
user.setFirstName(value);
}
@InjectComponent
private Zone updateZone;
/**
* <p>
* JSON parameter used to configure InPlaceEditor callback
* </p>
*/
public JSONObject getOptionsJSON()
{
JSONObject params=new JSONObject();
Object [] context = new Object [] {currentIndex};
String listenerURI = _componentResources.createEventLink("refresh", context).toAbsoluteURI(false);
String zoneID = updateZone.getClientId();
params.put("tooltip", "Cliquer pour �diter");
params.put("callback", new JSONLiteral("function(value, settings)" +
"{" +
" var zoneElement = $('#"+zoneID+"');" +
" zoneElement.tapestryZone('update',{url : '"+listenerURI+"',params : {id:"+currentIndex+"} });" +
"}"));
return params;
}
@OnEvent(value = "refresh")
public Object refresh(Long id) {
user = (User)users.get(id.intValue());
return updateZone.getBody();
}