我试图通过ajax从我的日历中获取值。
xhtml部分:
public class ExternalClass
{
public string EXproperty1 { get; set; }
public string EXproperty2 { get; set; }
public string EXproperty3 { get; set; }
public ExternalClass() { }
}
public class NewClass:ExternalClass
{
public string NewProperty1 { get; set; }
public string NewProperty2 { get; set; }
public NewClass() { }
}
控制器:
<p:calendar
id="newSimFrom"
value="#{SimModel.from}" <!-- this works -->
showOn="button"
mask="true"
pattern="dd.MM.yyyy"
>
<p:ajax event="dateSelect" process="@this" update="newSimUnt" listener="#{SimController.simFromChanged()}" />
</p:calendar>
但我一无所获,似乎没有事件被解雇。
我还尝试了public void simFromChanged(SelectEvent se) {
log.info("called");
log.info(""+se.getObject());
//this is temporary till I can figure out what's even going on
}
以及event="change"
和event="select"
(后者按照https://stackoverflow.com/a/42295586的建议)
另外,我试图在没有括号的情况下开启听众,似乎没有任何差异。
日历位于表单标记内。 (有点,如果process="@this"
以上有2层,那会有所不同吗?)(https://stackoverflow.com/a/17213127/7591918)
我应该去哪些想法来调试发生了什么?我对Primefaces和整个JSF都比较陌生,我的IDE控制台和我的浏览器控制台都没有给我任何错误。
谢谢!
答案 0 :(得分:0)
听众中的方法拼写不正确。你忘记了&#34; new&#34;。
如果您想让活动不使用括号。
你得到的事件是DateSelectEvent,所以这应该有效:
XHTML:
<p:ajax event="dateSelect" process="@this" update="newSimUnt" listener="#{SimController.newSimFromChanged}" />
控制器:
public void newSimFromChanged(DateSelectEvent se) {
log.info("called");
log.info("" + se.getDate());
//this is temporary till I can figure out what's even going on
}
如果这不起作用,则错误必须在其他地方。
答案 1 :(得分:0)
Wep0n,试试这些例子:
<p:calendar id="newSimFrom" value="#{SimModel.from}"
showOn="button" mask="true" pattern="dd.MM.yyyy">
<p:ajax event="dateSelect" update="newSimUnt"
listener="#{SimController.simFromSelected}" />
<f:ajax event="change" execute="@this" render="newSimUnt"
listener="#{SimController.simFromChanged}"/>
</p:calendar>
在您的managedBean SimController中:
public void simFromSelected(DateSelectEvent event) {
System.out.println("DateSelectEvent " + event.getDate());
}
public void simFromChanged(AjaxBehaviorEvent event) throws MWSException {
System.out.println("AjaxBehaviorEvent " + event.getDate());
}
答案 2 :(得分:0)
所以显然,我的问题在于Spring内部如何处理类,或者更确切地说自动名称生成是如何工作的,因为我没有明确地命名bean。
listener="#{SimController.newSimFromChanged}"
已更改为
listener="#{simController.newSimFromChanged}"
(注意小写s)
现在它有效。
这是非常不直观的(IMO),我不确定这是否普遍适用,但如果其他人遇到同样的问题我会留在这里。请注意,如果您的班级以多个大写字母开头,这也不适用,如果我已将我的班级命名为SIMController
,那么它会立即起作用。