我正在尝试将参数传递给flex:
<embed name='costsProject' src='CostsOfProject.swf' height='800%' width='600%'
pluginspage='http://www.adobe.com/go/getflashplayer'
flashVars='projectId=#{cep_TBModelBean.projectId}'/>
但是我收到了这个错误:
[ServletException in:../ pages / gestioncep / viewTB / viewTBContent.jsp] javax.servlet.jsp.JspException:org.apache.jasper.JasperException:/pages/gestioncep/viewTB/testCost.jsp(14,163)#模板文本'
中不允许{...}
当我写flashVars='projectId=292'
时,没关系,我得到了结果。
这是如何引起的?如何解决?
答案 0 :(得分:0)
这是因为<embed>
标记不是JSF标记,因此您无法直接使用它。最好有一个<h:inputHidden>
来保存项目ID值,并使用Javascript来使用JavaScript更新flashVars
代码属性。
<script type="text/javascript">
function setupFlex() {
var projectId = document.getElementById('hidProjectId').value;
var flexObject = document.getElementsByName('costsProject')[0];
flexObject.flashVars = 'projectId=' + projectId;
}
</script>
<body onload="setupFlex()">
<!-- note: the <h:inputHidden> is outside a form -->
<h:inputHidden id="hidProjectId" value="#{cep_TBModelBean.projectId}" />
<embed name='costsProject' src='CostsOfProject.swf'
pluginspage='http://www.adobe.com/go/getflashplayer' height='800%' width='600%'
flashVars=''/>
</body>
答案 1 :(得分:0)
遗留JSP中确实不允许模板文本中的#{}
,但仅限于其后续Facelets。
如果您可以保证托管bean已经在该点创建并出现在作用域中(例如,通过让JSF组件在<embed>
标记之前引用相同的托管bean),那么您可以使用${}
访问它,这在JSP中的模板文本中是允许的。关键点是${}
在托管bean不存在于范围内时不会自动创建托管bean,但它可以毫无困难地访问其属性。
<h:someComponent ... value="#{cep_TBModelBean.someProperty}" />
...
<embed name='costsProject' src='CostsOfProject.swf' height='800%' width='600%'
pluginspage='http://www.adobe.com/go/getflashplayer'
flashVars='projectId=${cep_TBModelBean.projectId}'/>