Java 如何保存动态创建的HtmlInputText组件的值
这个问题实际上是此处所述问题的下一步: 因此,下一步是实际保存用户使用前面问题中生成的动态表单提交的值(通过编程创建的jsf表单,由简单的InputExt组成)。 以下是每个组件的代码: 模型:Java 如何保存动态创建的HtmlInputText组件的值,java,jsf,jsf-2,Java,Jsf,Jsf 2,这个问题实际上是此处所述问题的下一步: 因此,下一步是实际保存用户使用前面问题中生成的动态表单提交的值(通过编程创建的jsf表单,由简单的InputExt组成)。 以下是每个组件的代码: 模型: @Entity @Table(name = "imageviewer_crreviewerformdata") public class CRReviewerFormData implements Serializable { private static final long serialVers
@Entity
@Table(name = "imageviewer_crreviewerformdata")
public class CRReviewerFormData implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "FdId")
private Long fdId;
@Column(name = "Input1")
private String input1;
@Column(name = "Input2")
private String input2;
@Column(name = "Input3")
private String input3;
/* getters & setters*/
// ...
观点:
<p:commandButton value="View" action="#{reviewReportBean.updateDynamicPanelGrid()}"
oncomplete="dlg.show()" icon="ui-icon-image" >
<f:param name="selectedImage" value="#{cRImageData.imName}" />
</p:commandButton>
...
<p:outputPanel id="outerContainerDynamicPanelGrid" autoUpdate="true">
<h:panelGrid id="innerContainerDynamicPanelGrid"
binding="#{reviewReportBean.dynamicPanelGrid}">
</h:panelGrid>
</p:outputPanel>
<p:commandButton id="viewSaveForm" value="Save"
action='#{reviewReportBean.saveReport()}'>
</p:commandButton>
<p:commandButton id="viewEditForm" value="Edit"
action='#{reviewReportBean.editReport()}'>
</p:commandButton>
...
如何将动态创建的HtmlInputText
组件的值保存到bean属性
我在控制器(reviewReportBean)中实现了一个典型的Save()方法,如下所示:
public String saveReport() {
String result = null;
System.out.println(">>>> method to save form called!");
Session session = HibernateUtil.getSessionFactory().openSession();
CRReviewerFormData cRReviewerFormData = new CRReviewerFormData();
cRReviewerFormData.setInput1(this.getInput1());
cRReviewerFormData.setInput2(this.getInput2());
cRReviewerFormData.setInput3(this.getInput3());
Transaction tx = null;
try
{
tx = session.beginTransaction();
session.save(cRReviewerFormData);
tx.commit();
result = SUCCESS;
}
catch (Exception e)
{
if (tx != null)
{
tx.rollback();
result = ERROR;
e.printStackTrace();
}
}
finally
{
session.close();
}
return result;
}
当我尝试使用“保存”按钮时,收到以下错误:
16:44:08,632 ERROR [ExceptionHandlerAjaxImpl:57] Component ID A3702:imageEditor:label1 has already been found in the view.
java.lang.IllegalStateException: Component ID A3702:imageEditor:label1 has already been found in the view.
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:821)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
at com.sun.faces.application.view.StateManagementStrategyImpl.saveView(StateManagementStrategyImpl.java:144)
再往下一点,我看到:
SEVERE: Servlet.service() for servlet ImageViewer Servlet threw exception
javax.portlet.faces.BridgeException: java.lang.IllegalStateException: CDATA tags may not nest
表单ID是否存在实际问题
我实现的保存方法是否足够,或者我是否必须设置其他内容?导致与重复ID和cdata标记相关的例外的问题已通过设置解决:
FacesContext.getCurrentInstance().getViewRoot().setTransient(true);
在updateDynamicPanelGrid()方法中
FacesContext.getCurrentInstance().getViewRoot().setTransient(true);