Jsf 引申形式。保存或加载后清除表单
我已经使用如下所示的组件构建了一个类似primefaces扩展向导的表单,包括步骤: 我的back bean是视图范围的,但是当我完成步骤并保存表单时,在随后的表单加载中它不会被刷新或清除(我在第一次提交表单时选择的值仍然存在) “我的命令”按钮位于向导面板代码的末尾,如下所示:Jsf 引申形式。保存或加载后清除表单,jsf,primefaces,primefaces-extensions,Jsf,Primefaces,Primefaces Extensions,我已经使用如下所示的组件构建了一个类似primefaces扩展向导的表单,包括步骤: 我的back bean是视图范围的,但是当我完成步骤并保存表单时,在随后的表单加载中它不会被刷新或清除(我在第一次提交表单时选择的值仍然存在) “我的命令”按钮位于向导面板代码的末尾,如下所示: <h:form id="WizardForm"> <pe:masterDetail id="masterDetail" level="#{reviewWizard.curre
<h:form id="WizardForm">
<pe:masterDetail id="masterDetail" level="#{reviewWizard.currentLevel}" showBreadcrumb="false" style="margin-top:20px">
<f:facet name="header">
...
</f:facet>
<pe:masterDetailLevel level="1">
<p:dataTable id="patients" var="patient"
value="#{reviewWizard.cRImageDataListPatients}"
selection="#{reviewWizard.selectedPatients}" rowKey="#{patient}"
paginator="true" rows="10" paginatorAlwaysVisible="false"
emptyMessage="No records found" >
<p:ajax event="rowToggle" listener="#{reviewWizard.onRowToggle}"
update=":WizardForm:patients:selectedPatientImages" />
<f:facet name="header">
Select one or many images using the checkboxes and press "Next" button to proceed.
</f:facet>
<p:column selectionMode="multiple" style="width:18px" styleClass="mandara"/>
<p:column style="width:18px">
<p:rowToggler />
</p:column>
<p:column headerText="Patient ID">
#{patient}
</p:column>
<p:rowExpansion>
<p:dataTable id="selectedPatientImages" var="cRImageData"
value="#{reviewWizard.getSelectedPatientImages()}"
rowKey="#{cRImageData.imId}" emptyMessage="No records found"
style="padding:10px 40px;">
<p:column headerText="Image Name">
#{cRImageData.imName}
</p:column>
<p:column headerText="Image Type">
#{cRImageData.imType}
</p:column>
...
</p:dataTable>
</p:rowExpansion>
...
</p:dataTable>
<p:commandButton value="Next" process="masterDetail" style="margin-top: 10px;" icon="ui-icon-arrowthick-1-e">
<pe:selectDetailLevel step="1"/>
</p:commandButton>
</pe:masterDetailLevel>
<pe:masterDetailLevel level="2">
...
</pe:masterDetailLevel>
<pe:masterDetailLevel level="3">
...
</pe:masterDetailLevel>
<pe:masterDetailLevel level="4">
...
</pe:masterDetailLevel>
<pe:masterDetailLevel level="5">
<p:panel header="Confirmation">
<p:panel style="border:none;">
<h:outputText value="Selected Patients: " style="font-weight:700;"/>
<h:outputText value="#{reviewWizard.getSelectedPatiensString()}" />
</p:panel>
<p:panel style="border:none;">
<h:outputText value="Selected Features: " style="clear:left;font-weight:700;"/>
<h:outputText value="#{reviewWizard.getSelectedFeaturesString()}" />
</p:panel>
<p:panel style="border:none;">
<h:outputText value="Selected Reviewers: " style="clear:left;font-weight:700;"/>
<h:outputText value="#{reviewWizard.getSelectedReviewersString()}" />
</p:panel>
<p:panel style="border:none;">
<h:outputText value="Protocol Description: " style="clear:left;font-weight:700;"/>
<h:outputText value="#{reviewWizard.getReviewProtocolDesc()}" />
</p:panel>
<p:commandButton value="Back" style="margin-top: 10px;" icon="ui-icon-arrowthick-1-w"
process="@this" immediate="true">
<pe:selectDetailLevel step="-1"/>
</p:commandButton>
<p:commandButton value="Submit" process="masterDetail"
actionListener="#{reviewWizard.save}"
style="margin-top: 10px;" icon="ui-icon-disk">
<pe:selectDetailLevel level="1" resetInputs="@all"/>
</p:commandButton>
</p:panel>
</pe:masterDetailLevel>
</pe:masterDetail>
</h:form>
...
使用复选框选择一个或多个图像,然后按“下一步”按钮继续。
#{患者}
#{cRImageData.imName}
#{cRImageData.imType}
...
...
...
...
...
和我的backbean(在“save”操作结束时创建新的空对象,如primefaces extensions相关示例中所建议的):
ManagedBean(name=“reviewWizard”)
@视域
公共类ReviewWizard实现可序列化{
私有静态最终长serialVersionUID=-7410916604435445849L;
私人名单患者;
私有列表cRImageDataListPatientImages;
private CRImageData[]选择的图像;
私有字符串[]选择的患者;
可用的私有列表变量;
private CRVariable[]selectedVariables;
私人审查协议审查协议;
私有字符串reviewProtocolDescription;
可供浏览者使用的私人列表;
私人用户[]选择的浏览器;
私有列表可用于查看内部;
private CRReviewerData[]已选择的远程用户内部;
私有CRTask[]CRTask;
私有int currentLevel=1;
//记录器
私有静态记录器Logger=Logger.getLogger(ReviewWizard.class.getName());
私有静态最终字符串SUCCESS=“SUCCESS”;
私有静态最终字符串ERROR=“ERROR”;
//关于报表加载的问题
@抑制警告(“未选中”)
@施工后
公共void init(){
//向UPM调用SOAP服务以获取患者
CallWebService CallWebService=新建CallWebService();
cRImageDataListPatients=callWebService.call(“PatientIds”);
availableCRVariables=getCRVariables();
//设置SelectedImage以避免空指针异常
选择图像=新犯罪数据[0];
selectedPatients=新字符串[0];
selectedVariables=新的CRVariable[0];
试一试{
availableReviewers=getReviewers();
}捕获(PortalException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(系统异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
selectedReviewers=新用户[0];
reviewProtocolDescription=新字符串();
设置SelectedReviewerData内部(新的CRReviewerData[0]);
}
//关于保存报告表单
公共作废保存(ActionEvent ActionEvent){
字符串结果=null;
List mySelectedVariables=Arrays.asList(selectedVariables);
List mySelectedPatients=Arrays.asList(selectedPatients);
List mySelectedReviewers=Arrays.asList(selectedReviewers);
列出mySelectedReviewersInternal=转换器(mySelectedReviewers);
现在日期=新日期();
Session Session=HibernateUtil.getSessionFactory().openSession();
CRReviewProtocol reviewProtocol=新CRReviewProtocol();
reviewProtocol.setRevProtDescription(this.getReviewProtocolDescription());
回顾protocol.setCrimagedata(我选择的患者);
查看protocol.setCrvariables(mySelectedVariables);
审查协议。setcRReviewerData(MySelectedReviewerInternal);
事务tx=null;
尝试
{
tx=session.beginTransaction();
session.save(reviewProtocol);
tx.commit();
logger.debug(“新记录:+reviewProtocol+”,wasCommitted:+tx.wasCommitted());
结果=成功;
}
捕获(例外e)
{
如果(tx!=null)
{
tx.回滚();
结果=错误;
e、 printStackTrace();
}
}
最后
{
//session.close();
}
infoMsg(“成功”,“审查协议已成功创建!”);
对于(int j=0;j编辑:
您正在reviewProtocol=new CRReviewProtocol();
中创建新的空对象,该变量仅在save(ACtionEvent ACtionEvent)
方法的范围内可见
如果您从链接中看到示例中的类似内容,您应该有如下内容:
<p:inputText required="true" label="Firstname" value="#wizardMasterDetailController.user.firstname}"/>
您必须设置user=new user()
才能重置它。
在这种情况下,用户是一个类变量,如何调用您的类变量,这就是您必须重置的变量
请发布更多面板内容,以更好地帮助您。通过在“保存”操作的底部设置“我选择的变量”来解决此问题,如:
...
//create an empty review protocol
ReviewWizard reviewWizard = new ReviewWizard();
setSelectedImages(null);
setSelectedPatients(null);
setSelectedVariables(null);
setSelectedReviewers(null);
setReviewProtocolDescription(null);
currentLevel=1;
...
我知道你已经在使用一个视图范围,已经尝试过这个解决方案了吗?是的。我正在使用一个视图范围的back bean并尝试过:但是运气不好!请发布你的reviewWizard的代码,你正在从一个局部变量创建一个新的空对象,而不是从你用来保存的变量创建一个新的空对象
...
//create an empty review protocol
ReviewWizard reviewWizard = new ReviewWizard();
setSelectedImages(null);
setSelectedPatients(null);
setSelectedVariables(null);
setSelectedReviewers(null);
setReviewProtocolDescription(null);
currentLevel=1;
...