믹스 라인의 configure
메서드가 protected로 표시되어 있기 때문에 내가 할 수 있었던 유일한 방법은 Autocomplete
믹스 인을 내 자신의 버전으로 확장하는 것이 었습니다. 여기 수업이 있습니다. 나는 내 자신의 사건을 해고하고있다. providecompletions
처리기에 label
, value
및 uid
에 대한 값을 지정해야합니다. 영역 매개 변수는 사용자가 완료 목록에서 항목을 클릭 할 때 업데이트 할 영역입니다.
믹스 인 :
import java.util.ArrayList;
import java.util.List;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.json.JSONLiteral;
import org.apache.tapestry5.json.JSONObject;
import org.got5.tapestry5.jquery.mixins.Autocomplete;
public class UserAutocomplete extends Autocomplete {
public static final String CHANGE_EVENT_NAME = "autocompleteUser";
@Inject
private ComponentResources resources;
@Parameter(defaultPrefix=BindingConstants.LITERAL)
private String zone;
@OnEvent(value = "provideCompletions")
public List<JSONObject> autoComplete(String query) {
List<JSONObject> strings = new ArrayList<JSONObject>();
if(query != null) {
for(User u : service.searchUsers(query.trim())) {
JSONObject so = new JSONObject();
String name = u.getName();
so.put("label", name);
so.put("value", name);
so.put("uid", u.getId());
strings.add(so);
}
}
return strings;
}
protected void configure(JSONObject config) {
config.put("url", resources.createEventLink("autocomplete").toURI());
String url = resources.createEventLink(CHANGE_EVENT_NAME).toURI();
config.put("options", new JSONObject().put("select", new JSONLiteral("function(e, d) {var zone = $('#" + zone + "'); if (!zone) { return; } "
+ "zone.tapestryZone('update', {url: '" + url + "'+'/'+d.item.uid});}")));
}
}
페이지 템플릿 :
<t:textfield value="query" autocomplete="off" t:mixins="UserAutocomplete" t:zone="resultZone" />
페이지 클래스 : 당신의 응답을
...
@InjectComponent
private Zone resultZone;
@OnEvent(value = UserAutocomplete.CHANGE_EVENT_NAME)
void userChange(Integer id) {
User selectedUser = service.findUser(id);
renderer.addRender(resultZone);
}
감사합니다. – banri16