我想测试ajaxified <p:selectOneListBox>
元素是否正常工作。在基于JSF + PrimeFaces的portlet上,我创建了上面的代码。基本上,在<p:selectOneListBox>
列表中的项目选择中,我想要使用先前所选项目的值更新标签。不幸的是,它似乎没有按预期工作。
.xhtml方:
<form id="myform">
<p:selectOneListbox id="myselect" value="#{bean.optionSelected}">
<p:ajax listener="#{bean.onChange}" process="myselect" update="toupdate" onstart="onstart()" oncomplete="oncomplete()" onerror="onerror()" onsuccess="onsuccess()"/>
<f:selectItem itemLabel="Option 1" itemValue="1" />
<f:selectItem itemLabel="Option 2" itemValue="2" />
<f:selectItem itemLabel="Option 3" itemValue="3" />
</p:selectOneListbox>
<h:outputText id="toupdate" value=">#{bean.optionSelected}" />
</form>
Bean方面:
@ManagedBean(name = "bean")
@ViewScoped
public class Bean implements Serializable {
private static final long serialVersionUID = 201709131528L;
private static Logger logger = Logger.getLogger(Bean.class);
private String optionSelected = "-1";
public Bean() {
logger.trace("bean created");
}
@PostConstruct
private void onPostConstruct() {
logger.trace("start");
}
public String getOptionSelected() {
return this.optionSelected;
}
public void setOptionSelected(String optionSelected) {
logger.trace("start");
this.optionSelected = optionSelected;
}
public void onChange() {
logger.trace("start");
}
}
每次从列表中选择一个选项时,我都会从控制台获得以下日志:
Bean:<init>():bean created
Bean:onPostConstruct():start
从浏览器的控制台我得到以下日志:
onstart():
onerror():
oncomplete():
作为JSF + PF世界的新手,我想知道:
1)为什么不调用onChange()
侦听器。
2)为什么没有设置属性optionSelected
。
3)为什么在每个选项选择上创建bean bean
。
4)为什么ajax请求失败。
任何澄清都会非常准确。感谢。
答案 0 :(得分:0)
作为JSF + PF世界的新手,我想知道:1)为什么不调用onChange()侦听器。 2)为什么没有设置属性optionSelected。 3)为什么在每个选项选择上创建bean bean。 4)为什么ajax请求失败。
我相信您的所有问题都是由于您使用的是html <form>
元素而不是JSF <h:form>
组件。我能够在我的机器上本地重现所有这些错误(出于某种原因除了#4),一旦我将<form>
更改为<h:form>
,一切都正常。
有关JSF h:form
标记的功能的更多信息,请查看以下链接: