jsf将参数传递给flex

时间:2012-10-23 08:11:42

标签: java jsp jsf flex4 el

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

这是如何引起的?如何解决?

2 个答案:

答案 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}'/>

另见: