1

我正在尝试将参数传递给 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'的时候,没关系,我得到了结果。

这是如何引起的,我该如何解决?

4

2 回答 2

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>
于 2012-10-23T08:27:23.147 回答
0

#{}在传统 JSP 中确实不允许使用 in 模板文本,但仅在其后续的 Facelets 中才允许使用。

如果您可以保证托管 bean 已经创建并出现在该范围内(例如,通过让 JSF 组件在<embed>标记之前引用完全相同的托管 bean),那么您可以使用${}它来访问它,这是允许的JSP 中的模板文本。关键点是,${}当托管 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}'/>

也可以看看:

于 2012-10-23T10:49:40.093 回答