托管 bean:bean“#{bean.list}”:将我们带到 B.jsf -6ren">
gpt4 book ai didi

java - 有没有办法在单击按钮时不发送整个 Web 表单?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:30 27 4
gpt4 key购买 nike

我会尽量简短,请留在这里

"A.jsf"-> 托管 bean:bean“#{bean.list}”:将我们带到 B.jsf

        <p:growl id="msgs" showDetail="true"/>
<h:form id="myform1" enctype="multipart/form-data">
<p:panel header="Upload" style="font-size: 11px;">
<h:panelGrid columns="2" cellpadding="10">
<h:outputLabel value="Drawing:" />
<p:fileUpload fileUploadListener="#{bean.handleFileUpload}" update="msgs" allowTypes="*.*;"/>
</h:panelGrid>
<p:commandButton ajax="false" immediate="true" id="back" value="Back" action="#{bean.list}"/>
<p:commandButton ajax="false" id="persist" value="Persist" action="#{bean.handleRevision}" />
</p:panel>
</h:form>

然后 handleFileUpload()

        if(!upload){
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "You do not have permission to upload.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
...

"B.jsf"-> 托管 bean:bean2

 ...
<p:growl id="msgs" showDetail="true"/>
...

当我点击上传时,它给我一个咆哮的错误消息“你没有上传权限。”,这很好。但是当我点击“后退”,这将带我到 B.jsf 时,我看到了咆哮的消息“你没有上传权限。”再次。似乎正在发生的事情是,当我单击“返回”时,我发送了其他表单请求进行上传,然后生成了相同的错误消息,然后显示在 B.jsf 中。有没有办法解决这个问题,除了将“后退”按钮放入空窗体之外,因为现在我有两个按钮彼此叠放,而不是并排放置。我尝试这样做:

FacesContext.getCurrentInstance().addMessage("tom", msg);

希望它会发送到 id="tom"的组件,这样 id=msgs 的咆哮就不会加载,但运气不好。当我单击 Back 按钮时,我尝试打开 upload 标志,但是在处理 back 导航的方法之前请求 Web 表单被叫到。

它没有我想要的那么简短,因此我想为此道歉:D

最佳答案

beside putting the "Back" button into an empty form, because now I have two buttons standing on top of each others

HTML <form>默认情况下是 block element . HTML block 元素默认被放置在一个新行中。你实际上想让它成为 inline element .您可以使用 display: inline; 执行此操作在 CSS 中。

回到实际问题,令我惊讶的是 fileUploadListener尽管 immediate="true" 仍调用方法在p:commandButton .我试图重现这一点,我可以确认这一点。但我不希望它发生。 通常 immediate="true"在按钮上 跳过提交“整个”表单的解决方案(至少,跳过没有此属性的 UIInput 组件)。进一步调查了解到我 p:fileUpload不是 UIInput组件,并且在应用请求值阶段而不是验证或更新模型值阶段触发监听器。所以这种行为是完全可以预测的,但我仍然是设计中的一个疏忽。

p:fileUpload需要 ajax="false"p:commandButton 上组件,另一方面,您也可以将其从后退按钮中删除,以便它触发 ajaxical 请求,从而跳过 fileUploadListener被调用。

关于java - 有没有办法在单击按钮时不发送整个 Web 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3560459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com