刚刚解决了壹個细小的技术问题,用 PrimeFaces 4.0 的 UI 组件完成界面元素的开发,XHTML 页面上共有三個按钮,id 分别为 verifyButton、viewButton、downloadButton,其中页面初始化时,verifyButton 处于激活状态(enable),viewButton 和 downloadButton 处于未激活状态(disable),当点击 verifyButton 之后,页面会向后台 Controller 发送 ajax 请求,然后在完成壹些业务逻辑之后返回页面,并将
viewButton 和 downloadButton 激活,此时三個按钮均处于可点击状态。页面部分源代码如下所示:
<h:form id="verificationForm">
<div class="button-padding right mt10">
<p:commandButton id="verifyButton" value="校验" update="@this"
widgetVar="verifyButton"
disabled="#{!batchVerificationMB.enabledVerifyButton()}"
process="@this batchVerificationTable"
actionListener="#{batchVerificationMB.verify()}"
oncomplete="validationUtil.handleAjaxResponse(args, displayErrorMessagesBathVerification, function(){displayVerifyMessage();viewButton.enable();downloadButton.enable();})" />
<p:commandButton id="viewButton" value="查看"
process="@this" widgetVar="viewButton"
update=":verificationResultForm"
onclick="verificationResultDialog.show();" />
<p:commandButton id="downloadButton" value="导出"
process="@this" widgetVar="downloadButton"
ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)" icon="ui-icon-arrowthichk-s">
<p:fileDownload value="#{fileDownloadController.file}" />
</p:commandButton>
<script type="text/javascript">
viewButton.disable();
downloadButton.disable();
</script>
</div>
</h:form>
<h:form id="verificationResultForm">
//...此处省略部分代码
</h:form>
<p:dialog widgetVar="verificationResultDialog" modal="true" closable="true" resizable="false" width="800">
//...此处省略部分代码
</p:dialog>
其实只有两個地方需要注意,分别列举如下:
1、页面初始化时,我们需要通过Javascript脚本将viewButton和downloadButton设置为disable状态,见于第19和20行,其实就是普通的Javascript脚本;
2、另外,由于后面两個按钮是否激活是受按钮verifyButton控制的,所以我们需要在verifyButton里加上壹個属性 oncomplete,然后在 oncomplete 里面控制 viewButton 和 downloadButton 的激活状态;代码很长,但是并不复杂,实际只做了以下事情:先将后台反馈的信息显示在界面指定位置上,然后将 viewButton 和 downloadButton 激活;我们把 oncomplete 里的代码抽取出来是这样的。
validationUtil.handleAjaxResponse(
args,
displayErrorMessagesBathVerification,
function(){
//显示后台反馈的信息
displayVerifyMessage();
//将viewButton和downloadButton状态激活
viewButton.enable();
downloadButton.enable();
}
)
其实说起来,PrimeFaces 4.0 的 <p:commandButton> 用起来并不复杂,只是自己还不熟悉其用法罢了。查看
PrimeFaces 4.0 官方文档是,它是这样介绍 oncomplete 属性的: 默认值为null,类型为String,当ajax请求完成之后客户端会回调属性oncomplete指定的内容。其实已经说的非常简单明了了。类似的事件属性还有 onstart、onsuccess、onerror 等,如果有兴趣的朋友可以自行查找
相关文档以了解更多细节。
分享到:
相关推荐
- **<h:commandButton>**:命令按钮。 - **<h:commandLink>**:命令链接。 - **<h:dataTable>**:数据表格。 - **<h:form>**:表单容器。 - **<h:graphicImage>**:图形图像。 - **<h:inputHidden>**:隐藏输入字段...
- `<h:commandButton>`:创建按钮,触发动作事件。 8. Freemarker和Velocity模板引擎标签: - Freemarker:`<#if>`、`<#foreach>`等,提供强大的模板语言功能。 - Velocity:`#if`、`#foreach`等,与Freemarker...
outputLabel>标签通常用于显示与输入组件关联的标签,例如:<h:outputLabel for="inputId" value="输入框标签"></h:outputLabel><h:inputText id="inputId" value="#{backBean.inputValue}"></h:inputText>`for`属性...
- 触发方式有两种:一种是在页面加载完成后立即调用,另一种是在某些更新操作(如`<p:commandButton>`的`update`属性)完成后调用,确保在正确的时间点设置焦点和键盘导航。 此外,还提到了一个特定场景——修改...
`<h:outputStylesheet>`和`<h:outputScript>`用于添加CSS和JavaScript文件,`<h:inputText>`和`<h:inputTextarea>`是文本输入控件,`<h:commandButton>`和`<h:commandLink>`则用于创建命令按钮和链接。 3. **...
JSF标签如`<h:outputText>`显示文本,`<h:inputText>`创建输入字段,`<h:commandButton>`定义按钮,`<f:view>`定义视图范围。JSF的核心优势在于其组件化和事件驱动的特性,提供了丰富的UI组件和强大的数据绑定功能。...
表格的每行可以通过`<h:row>`来定义,而表头和表尾则通过`<h:column>`和`<h:columnGroup>`实现。 JSF标签库是JSF框架的核心组成部分,掌握这些标签及其属性对于高效开发Web应用程序至关重要。通过合理利用这些标签...
5. 其他:包括`<h:form>`、`<h:message>`、`<h:messages>`和`<h:graphicImage>`等。 JSF组件通常有若干共同的属性,如: - `id`:用于组件的唯一标识。 - `binding`:允许绑定到`UIComponent`对象。 - `rendered`:...
以上代码展示了如何使用MyFaces标签库中的`<h:outputText>`, `<h:inputText>`, `<h:message>`和`<h:commandButton>`等标签创建一个简单的登录表单。`#{bean.userName}`和`#{bean.password}`通过表达式绑定到后端Bean...
- **`<gc:commandButton>`**:实现按钮控件,支持验证及确认对话框。 - **`<gc:convertNumberFormat>`**:用于格式化数字显示。 - **`<gc:inputCode>`**:输入代码或特定类型的文本。 - **`<gc:panelGrid>`**:用于...
- **命令(Command)类标签**:名称以`command`开头,常用于创建命令按钮或链接,例如`<h:commandButton>`。 - **选择(Selection)类标签**:名称以`select`开头,用于提供用户选择项,例如`<h:selectOneMenu>`。 -...
- `<h:commandButton>`:执行服务器端操作的按钮。 - `<h:form>`:定义一个表单。 5. **JavaScript**:主要用在客户端进行交互,例如`<script>`标签用于引入或编写JavaScript代码,`<a href="#" onclick="...">`...
- `<h:commandButton>`和`<h:link>`:用于提交表单或导航到其他页面。 - `<h:messages>`:显示验证错误信息。 - `<h:panelGrid>`:布局组件,类似HTML的table。 - `<h:selectOne>`和`<h:selectMany>`:创建单选...
JSF标签库包括h:标签(如<h:outputText>、<h:commandButton>)和f:标签(如<f:view>、<f:converter>),通过这些标签可以轻松创建和管理UI组件。 6. FreeMarker:FreeMarker是一个模板引擎,用于生成HTML或其他类型...
1. `<h:outputLabel>`:生成`<label>`标签,通过`for`属性与对应的输入组件关联。 2. `<h:outputLink>`:生成`<a>`链接标签,`value`属性可以绑定JSF表达式。 3. `<h:outputFormat>`:格式化输出文本,支持参数化,...
在a4j组件部分,作者从<a4j:actionparam>开始,逐一讲解了如何使用<a4j:form>、<a4j:region>、<a4j:support>、<a4j:commandButton>、<a4j:commandLink>、<a4j:status>等组件来实现AJAX功能。每个组件都附带了详细的...