【发布时间】:2014-03-07 14:45:16
【问题描述】:
我的目标是将带有参数的字符串 (Hello {0}) 从支持 bean 传递给 JavaScript。我目前的做法是将字符串放在h:inputHidden 中,让JS 读取onLoad 的值。
可悲的是,h:inputHidden 内部的f:param 不像h:outputFormat 那样工作。
什么方法通常是可取的?
- 我可以将字符串与支持 bean 中的参数结合起来,但 imo 这不应该是 bean 关心的问题。
- 我可以将它们组合到 JS 中,但这似乎又像是在重新发明轮子(使用
replace函数...) - 我没有看到使用
h:outputFormat的(好)方法,但让它对用户不可见。 - 我认为没有办法让
h:inputHidden接受f:params。
编辑:实际使用的实现是 Apache MyFaces 1.1.4,所以我将标题更新为 JSF 1.1。
由于 BalusCs 的回答,我想起了我的第一个(并且被丢弃的)方法:
-
直接包含在 JS 源代码中。
<script> var text = '<h:outputFormat value="Hello {0}"><f:param value="World" /></h:outputFormat>'; </script>
遗憾的是,在 JSF 1.1 中我不得不使用 <f:verbatim> 这使得代码真的很丑(即使是 Eclipse 语法检查器也不理解它 - 尽管它可以工作):
<f:verbatim>
<script>
var text = '</f:verbatim>
<h:outputFormat value="Hello {0}"><f:param value="World" /></h:outputFormat>
<f:verbatim>';
</script>
</f:verbatim>
另外一个缺点是我不能把它放在<head> 中,因为它必须在<f:view> 中。
【问题讨论】:
-
@BalusC, @LaurentG:谢谢你们两位的cmets。我会接受 LautentGs 的回答,因为这也是我的首选方法。正如我在问题编辑中提到的,
<f:verbatim>方法真的很难看。我会将赏金奖励给 BalusC,因为他花在他的答案和 cmets 上的所有时间都对我有很大帮助:) -
谢谢。我很想收到我的第一个赏金,但我必须同意,balusC 的答案总是最好的!