我对JSF和Primefaces有点新意,只是学习一本书并尝试边做边学;-) 做到这一点我有一个问题,我显然不会单独解决。
以下xhtml代码
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<h:head>
<title>My Testpage</title>
</h:head>
<h:body>
<h:panelGroup>
<pe:dynaForm id="form_kairos" value="#{kairosController.model}" var="m">
<pe:dynaFormControl type="input" for="txt">
<p:inputText cols="80" id="txt" value="#{m.value}" required="true"/>
</pe:dynaFormControl>
<f:facet name="buttonBar">
<p:commandButton value="Submit"
action="#{kairosController.submitForm}"
style="margin-left: 5px;"/>
</f:facet>
</pe:dynaForm>
</h:panelGroup>
</h:body>
</html>
按预期显示我的输入字段和提交按钮 - 很好! 但是按下按钮不会跳转到submitForm方法:o。
My Bean代码尽可能简单(现在)并且像这样:
import de.hlg.kairos.TextInput;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import org.primefaces.extensions.model.dynaform.DynaFormControl;
import org.primefaces.extensions.model.dynaform.DynaFormLabel;
import org.primefaces.extensions.model.dynaform.DynaFormModel;
import org.primefaces.extensions.model.dynaform.DynaFormRow;
@ManagedBean
@SessionScoped
public class KairosController implements Serializable {
private DynaFormModel model;
private TextInput myValue;
public KairosController() {
model = new DynaFormModel();
myValue = new TextInput("myValue");
DynaFormRow row = model.createRegularRow();
DynaFormLabel label11 = row.addLabel("my label", 1, 1);
DynaFormControl control12 = row.addControl(myValue, "input", 1, 1);
label11.setForControl(control12);
}
public DynaFormModel getModel() {
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "getModel()");
return model;
}
public String submitForm() {
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "submitForm()");
return null;
}
}
我已经阅读了一些讨论嵌套表单的线程,这些表单似乎与commandButton不兼容。其他人说ajax =“false”可以帮助按钮,但在我的例子中这些提示没有帮助,所以我认为可能还有其他东西(对于更有经验的人来说可能是非常明显的事情:lol:)我的代码出错了
不幸的是,我必须提一下,我看到与PFE showcase完全相同的行为,所以我无法与有效的东西进行比较。
任何使commandButton在dynaForm组件中没有ajax的情况下工作的建议或工作示例?
干杯, Joern
答案 0 :(得分:0)
我仔细研究了你的例子以及来自primeface扩展的动态"form"
。
dynaForm没有生成form
。它“仅”生成table
。因此,当您尝试通过向其添加commandButton
属性来创建ajax=false
非ajax时,commandButton会抱怨不存在周围的form
。
添加周围的form
元素。然后你的请求应该按照你期望的方式工作。
<h:form id="mainForm">
<pe:dynaForm id="form_kairos" value="#{kairosController.model}" var="m">
<pe:dynaFormControl type="input" for="txt">
<p:inputText cols="80" id="txt" value="#{m.value}" required="true" />
</pe:dynaFormControl>
<f:facet name="buttonBar">
<p:commandButton id="commandButton" value="Submit" ajax="false"
actionListener="#{kairosController.submitForm}" style="margin-left: 5px;" />
</f:facet>
</pe:dynaForm>
</h:form>