html:messages(转)


======================================================
注:本文源代码点此下载
======================================================

html:messages(转)

1. 简介

标签和标签有些相似之处, 也能够在网页上输出消息, 不过两者的使用方法有些差别.

2. 实例

3. 属性

(1) name: 指定actionmessages 对象存放在 request 或 session 范围内的属性 key(即上面实例中的message). 标签处理类将根据这一属性key 来检索request 或 session 范围的 actionmessages 对象.

(2) message: 指定消息的来源. 如果为true , 则从request 或 session 范围内检索出属性 key为 globals.message_key 的 actionmessages 对象, 此时 name 属性无效; 如果为false ,则根据name 属性来检索actionmessages 对象, 如果此时没有设置name 属性, 将采用默认值globals.error_key. message 属性的默认值为false.

(3) id: 用来命名从消息集合中检索出的每个 actionmessage 对象, 它和标签的name 属性匹配. 在上例中,标签的处理类每次从消息集合中取出一个 actionmessages 对象, 就把它命名为 "message",标签接着把这个名为"message" 的actionmessage 对象的消息输出到网页上.

4. 创建actionmessages 集合, 存入request 中

actionmessages actionmessages = new actionmessages();

actionmessages.add(actionmessages.global_message, new actionmessage("record.inserted"));

savemessages(request, actionmessages);


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
<think>好的,用户的问题是关于在JSF中使用PrimeFaces的`<p:messages>`组件实现换行输出。之前用户问过关于`<p:growl>`的换行问题,现在到了`<p:messages>`,可能是在开发中遇到了类似的显示问题。 首先,我需要回忆一下`<p:messages>`和`<p:growl>`的区别。`<p:messages>`通常用于显示表单验证错误或其他消息,位于页面特定位置,而`<p:growl>`是浮动的通知。两者的换行处理可能有相似之处,但具体实现可能不同。 用户之前的问题提到使用`<br>`标签或`\n`换行符无效,所以需要分析`<p:messages>`的渲染方式。可能的原因包括是否启用了HTML义,或者CSS样式是否阻止了换行符的解析。 接下来,我需要考虑解决方案。对于`<p:messages>`,常见的换行方法可能包括: 1. 使用`<br>`标签并设置`escape="false"`,但需要确认该属性是否存在。PrimeFaces的`<p:messages>`是否有这个属性?可能需要查阅文档。如果没有,可能需要其他方式处理。 2. 使用`\n`换行符,并结合CSS的`white-space`属性,比如`pre-line`或`pre-wrap`,这在之前的回答中提到过。 3. 检查消息内容的构造方式,是否正确地将换行符包含进去,比如在Java代码中使用`System.lineSeparator()`或直接添加`\n`。 另外,用户可能遇到的问题是消息被义,导致HTML标签被显示为文本而不是解析。因此需要确认如何禁用义,或者是否有其他属性控制这个行为。 还需要考虑PrimeFaces版本的问题,不同版本可能有不同的属性支持。比如,某些旧版本可能不支持某些CSS样式或属性,导致换行无效。 可能的示例代码包括: - 在XHTML中设置`<p:messages>`的样式,使用`white-space: pre-line`。 - 后端生成消息时添加`\n`,或者在消息中使用`<br>`并确保义被禁用。 - 如果`<p:messages>`不支持`escape`属性,可能需要通过其他方式处理,比如使用富文本或自定义渲染。 同时,需要提醒用户注意安全性,如果使用HTML内容,确保没有XSS漏洞,尤其是在处理用户输入时。 最后,总结步骤,分点说明不同的解决方案,并提供相关问题供用户进一步参考。确保回答结构清晰,符合用户之前示例的格式要求。</think>在 JSF 中使用 PrimeFaces `<p:messages>` 组件实现换行输出,需结合 **HTML 标签** 或 **CSS 样式** 处理换行逻辑。以下是分步解决方案: --- ### **1. 使用 `\n` 换行符 + CSS 样式** - **核心原理**:通过 CSS 的 `white-space` 属性解析换行符。 - **代码示例**: ```xhtml <p:messages id="messages" style="white-space: pre-line;" /> ``` 后端 Java 代码: ```java FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("第一行\n第二行\n第三行")); ``` - **样式说明**: - `white-space: pre-line`:保留换行符,自动合并空白符。 - `white-space: pre-wrap`:保留所有空格和换行符。 - `white-space: pre`:保留格式但不自动换行。 --- ### **2. 使用 `<br>` 标签强制换行** - **关键点**:`<p:messages>` 默认会HTML 标签,需通过其他方式实现。 - **解决方案**: - **自定义渲染器**:继承 `MessagesRenderer` 并禁用义。 - **直接插入 HTML**:通过 JavaScript 动态修改消息内容。 ```xhtml <p:messages id="messages" /> <script> // 假设消息内容已包含 <br> 标签 document.querySelectorAll('.ui-messages li').forEach(li => { li.innerHTML = li.textContent.replace(/\\n/g, '<br>'); }); </script> ``` --- ### **3. 分离摘要(Summary)和详细内容(Detail)** - **适用场景**:通过 `showDetail="true"` 显示多行内容。 - **代码示例**: ```xhtml <p:messages id="messages" showDetail="true" /> ``` 后端 Java 代码: ```java FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("摘要", "详细内容\n换行示例")); ``` - **效果**: - 摘要(Summary):单行显示。 - 详细(Detail):支持 `\n` 换行(需结合 CSS)。 --- ### **4. 动态 JavaScript 插入 HTML** - **适用场景**:完全控制消息内容。 - **代码示例**: ```xhtml <p:messages id="messages" /> <script> function showCustomMessage() { const message = '第一行<br>第二行'; const li = document.createElement('li'); li.innerHTML = message; document.querySelector('.ui-messages').appendChild(li); } </script> ``` --- ### **常见问题排查** 1. **检查 HTML 义**: - 默认情况下,`<p:messages>` 会HTML 标签,需通过 `escape="false"`(如果支持)或 JavaScript 处理。 2. **CSS 样式冲突**: - 确认 `white-space` 样式未被覆盖,使用浏览器开发者工具检查元素。 3. **PrimeFaces 版本限制**: - 旧版本(如 6.x)可能不支持 `white-space`,建议升级至 10+。 4. **消息内容构造**: - 后端代码需确保换行符正确插入(如 `System.lineSeparator()`)。 --- ### **完整验证示例** ```xhtml <h:form> <p:messages id="messages1" style="white-space: pre-line;" /> <p:messages id="messages2" showDetail="true" /> <p:commandButton value="触发消息" action="#{bean.showMessage}" update="messages1 messages2" /> </h:form> ``` 后端 Java 代码: ```java public void showMessage() { FacesMessage message1 = new FacesMessage("文本换行\n成功"); FacesMessage message2 = new FacesMessage("摘要内容", "详细内容\n换行示例"); FacesContext.getCurrentInstance().addMessage(null, message1); FacesContext.getCurrentInstance().addMessage(null, message2); } ``` --- ### **注意事项** - **安全性**:避免直接插入用户输入的 HTML,防止 XSS 攻击。 - **样式兼容性**:不同浏览器对 `white-space` 支持略有差异,建议测试。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值