У меня есть Composite Component, который использует ajax для изменения нескольких элементов при выборе элемента. Я также использую Primefaces p: ajax и p: commandButton вместо f: ajax если это имеет значение.Как найти параметр update/render внутри составного компонента?
Проблема заключается в том, что я не могу найти нужное атрибут обновления для использования на компонентах, чтобы весь компонент обновлялся. Например, в следующей кнопки:
<p:commandButton id="slGoUSA"
value="USA"
rendered="#{cc.USAButtonOn}"
actionListener="#{cc.doSetUSA}"
update="???" />
Я попытался все следующие, и ни один из них не работает:
update="@this"
update="@form"
update="#{cc.clientId}"
update=":#{cc.clientId}"
update="#{cc.clientId}:localID"
update=":#{cc.clientId}:localID"
Единственное, что делает работы заключается в следующем:
update="#{cc.attrs.update}"
, а затем клиентская страница передает некоторый clientId, который включает составной компонент. Однако я не хочу принуждать пользователя включать параметр обновления в вызов компонента. Есть ли удобный способ сделать это?
Update
Хорошо, я думаю, что это могло бы помочь, если бы я показал полный тестовый пример. Я реализую UINamingContainer обратно составного компонента, как это:
/*
* Test code
*/
package com.myapp.app.component;
import java.io.Serializable;
import javax.faces.component.FacesComponent;
import javax.faces.component.UINamingContainer;
@FacesComponent(value="qctest")
public class Qctest extends UINamingContainer implements Serializable {
private enum StateKey { Counter }
public Qctest() { }
@Override
public String getFamily() { return "javax.faces.NamingContainer"; }
public Integer getCounter() {
Integer i = (Integer) getStateHelper().get(StateKey.Counter);
if (i == null) i = Integer.valueOf(1);
else i += 1;
getStateHelper().put(StateKey.Counter, i);
return i;
}
}
Тогда определение куб.см выглядит следующим образом:
<!-- INTERFACE -->
<cc:interface componentType="qctest">
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
<h:outputText id="outText" value="Counter is now: #{cc.counter}" />
<br/>
<p:commandButton value="Hit Me" update=":#{cc.clientId}" />
<br/>
<h:commandButton value="Or Hit Me" >
<f:ajax render=":#{cc.clientId}"/>
</h:commandButton>
</cc:implementation>
</html>
Этот код в основном OMG моя первая страница AJAX когда-либо! приложение, за исключением того, что оно находится внутри составного компонента вместо обычной страницы с обычным бэкэндом.
Ни одной из кнопок не удается выполнить обновление. Firebug показывает отправку XHR, но ответ не обновляет счетчик. Ни одно из различных значений для обновление или визуализации работ. В случае, показанном на кнопку primefaces, кажется, не делать ничего, в случае командной кнопки JSF я получаю диалоговое окно, в котором говорится:
malformedXML: During update: test2form:xyz not found
Это кажется мне самым тривиальным использование AJAX Внутри Композитный компонент. Может ли кто-нибудь объяснить, что может быть?
Хм, вы также попробовали ' h: commandButton>' вместо этого? –
BalusC
Это в моем списке, чтобы попробовать. Но какую форму для клиники вы использовали бы для атрибута render? @BalusC – AlanObject
Может быть, вы можете поместить все в '