UIComponent getAttributes 仅从 JSF 获取最后一个值
UIComponent getAttributes only gets last value from JSF
我有一个 JSF 2.2 复合组件,它在同一页面上使用了不止一次。
@FacesComponent("myComponent")
public class MyComponent extends UIComponent {
public void test() {
System.out.printlin(getAttributes("value"));
}
}
组件 xhtml:
<composite:interface componentType="myComponent">
<composite:attribute name="value" required="true" type="java.lang.String" />
</composite:interface>
<composite:implementation>
<a4j:jsFunction name="test" action="#{cc.test()}" execute="input" />
<s:span id="input">
<h:inputText value="#{cc.attrs.value}" onclick="test()" />
</s:span>
</composite:implementation>
页面 xhtml
<my:myComponent value="#{bean.value}" /> -- line 1
<my:myComponent value="#{bean2.value}" /> -- line 2
当我单击第一个 myComponent 时,它会调用 test() 但会打印 bean2.value 而不是 bean.value 的值。如果我删除第 2 行,它会打印 bean.value。我以为调用 getAttributes() 会获取当前复合组件的值,但它似乎只获取页面上最后一个复合组件的值。有人可以向我解释这些属性应该如何工作或者我缺少什么吗?
这里是解决方案,将 id 属性附加到 jsFunction 以区别于页面上的其他相同组件:
<composite:interface componentType="myComponent">
<composite:attribute name="id" type="java.lang.String" />
<composite:attribute name="value" required="true" type="java.lang.String" />
</composite:interface>
<composite:implementation>
<a4j:jsFunction name="#{cc.attrs.id}test" action="#{cc.test()}" execute="input" />
<s:span id="input">
<h:inputText value="#{cc.attrs.value}" onclick="#{cc.attrs.id}test()" />
</s:span>
</composite:implementation>
我有一个 JSF 2.2 复合组件,它在同一页面上使用了不止一次。
@FacesComponent("myComponent")
public class MyComponent extends UIComponent {
public void test() {
System.out.printlin(getAttributes("value"));
}
}
组件 xhtml:
<composite:interface componentType="myComponent">
<composite:attribute name="value" required="true" type="java.lang.String" />
</composite:interface>
<composite:implementation>
<a4j:jsFunction name="test" action="#{cc.test()}" execute="input" />
<s:span id="input">
<h:inputText value="#{cc.attrs.value}" onclick="test()" />
</s:span>
</composite:implementation>
页面 xhtml
<my:myComponent value="#{bean.value}" /> -- line 1
<my:myComponent value="#{bean2.value}" /> -- line 2
当我单击第一个 myComponent 时,它会调用 test() 但会打印 bean2.value 而不是 bean.value 的值。如果我删除第 2 行,它会打印 bean.value。我以为调用 getAttributes() 会获取当前复合组件的值,但它似乎只获取页面上最后一个复合组件的值。有人可以向我解释这些属性应该如何工作或者我缺少什么吗?
这里是解决方案,将 id 属性附加到 jsFunction 以区别于页面上的其他相同组件:
<composite:interface componentType="myComponent">
<composite:attribute name="id" type="java.lang.String" />
<composite:attribute name="value" required="true" type="java.lang.String" />
</composite:interface>
<composite:implementation>
<a4j:jsFunction name="#{cc.attrs.id}test" action="#{cc.test()}" execute="input" />
<s:span id="input">
<h:inputText value="#{cc.attrs.value}" onclick="#{cc.attrs.id}test()" />
</s:span>
</composite:implementation>