複合コンポーネント内で ajax を使用すると、ajax 機能が動作しません。コードの何が問題になっていますか?
複合コンポーネント:
<composite:interface>
<composite:attribute name="filter" required="true" type="java.lang.String" />
<composite:attribute name="list" required="true" type="java.util.List" />
</composite:interface>
<composite:implementation>
<h:inputText value="#{cc.attrs.filter}">
<f:ajax event="keyup" render="#{cc.clientId}:table#{cc.clientId}" />
</h:inputText>
<h:dataTable id="table#{cc.clientId}" value="#{cc.attrs.list}" var="elem">
<h:column>
<h:outputText value="#{elem}" />
</h:column>
</h:dataTable>
</composite:implementation>
今は豆
@ManagedBean
@SessionScoped
public class Ajaxcc
{
private String filter;
private List<String> list;
public Ajaxcc()
{
list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
}
public List<String> getList()
{
List<String> filteredList = new ArrayList<String>();
for (String s : list)
{
if (filter == null || filter.trim().equals(""))
{
filteredList.add(s);
}
else if (s.contains(filter))
{
filteredList.add(s);
}
}
return filteredList;
}
public String getFilter()
{
return filter;
}
public void setFilter(String filter)
{
this.filter = filter;
}
}
今ビュー:
<h:form>
<myCustomComponent:ajaxcc list="#{ajaxcc.list}" filter="#{ajaxcc.filter}" />
</h:form>
私はmyfaces 2.1.10を使用しており、mavenによってTomcat 7.0.39にデプロイしています。
予想される動作: Web サイトのリストは、o - ボタンを押すたびに 1 つ、2 つ、4 つに減らされるはずです。
失敗: リストは縮小されません。
解決策は何ですか?
ところで、複合コンポーネントのコンテンツをビューに入れると、正しく機能します。
<h:form>
<h:inputText value="#{ajaxcc.filter}">
<f:ajax event="keyup" render="table" />
</h:inputText>
<h:dataTable id="table" value="#{ajaxcc.list}" var="elem">
<h:column>
<h:outputText value="#{elem}" />
</h:column>
</h:dataTable>
</h:form>
この場合、o を押すと、リストが予想される値に縮小されます。さらに、複合コンポーネントの ajax 呼び出しの応答が、データ テーブルのフィールド値に対して「空」のように見えることがわかりました。直接 ajax 呼び出しの応答には、新しいリストが含まれています。