0

我正在为 Oracle 数据库编写一个非常简单的前端。它基于 JSF 1.2、jsp,部署在 glassfish-ee-2.1 上,使用 NetBeans 6.5.1 开发。

是的,我知道这是2012年。

必须阅读内容,可能会对其进行更新,然后将其保存回数据库。

它适用于基于文本的元素。我向我的 UI 元素添加了绑定属性,我可以从 bean 访问它们以检索各种文本字段的值等。

我正在使用(这是一个要求?!)基于 jquery 的 msDropdown 组件(官方页面),它允许有一个带有图像和文本的漂亮下拉菜单。

然而,由于这个元素不是标准的,我没有找到一种方法来使用绑定属性从支持 bean 访问它。

这意味着我无法在页面加载时设置文本,就像我可以设置文本元素一样,此外,在处理支持 bean 中的提交时,我无法获取所选组件的值。

msDropDown 在 JSP 中是这样定义的:

<webuijsf:markup>
    <select id="status" name="status" style="left: 150px; top: 62px; width:100px">
        <option data-description="" data-image="base_3.gif" value=""></option>
        <option data-description="" data-image="base_0.gif" value="0"></option>
        <option data-description="" data-image="base_1.gif" value="1"></option>
        <option data-description="" data-image="base_2.gif"  value="2"></option>
    </select>
</webuijsf:markup>

我创建了一个 js 变量来保存我的下拉列表,以便稍后访问它的值。

<webuijsf:script>
    var oHandler1 = $("#status").msDropdown().data("dd");
    var index = oHandler1.selectedIndex;
</webuijsf:script>

然后我尝试像这样将该变量传递给我的支持bean:

<webuijsf:button actionListenerExpression="#{editApplication.submitUpdate}" actionExpression="#{editApplication.update_action}" id="update"
                                     style="height: 24px; left: 623px; top: 408px; position: absolute; width: 72px" text="Update">
    <f:attribute name="currentIndex" value="#{currentRow.value['APPNAME']}"/>
    <f:attribute name="currentStatus" value="<%=index%>"/>
</webuijsf:button>

但是我总是得到已经报告的错误 < 可能未在值中使用。

知道如何从 bean 访问那个特殊的下拉列表吗?或者将它的价值传递给bean?

非常感谢您的帮助,如果您需要更多代码,请告诉我!

来自 2006 年的奥利。/。

4

1 回答 1

0

msDropdown 通过彻底检查普通的 html 选择来工作。但是如果你真的在你的 jsf 文档中插入一个 html 选择,你将不会与 jsf 生命周期有任何集成。

解决方案是使用实际的 jsf 组件,即selectOneMenu。它将完全集成到生命周期中,这意味着您不需要任何黑客来检索值。它将像您页面上的任何其他组件一样提交。

渲染就像客户端上的selectOneMenu普通 html 选择一样,这意味着您可以使用 msDropDown 。唯一的困难是获取组件的 id。我建议使用 astyleClass代替。它会更容易。

<h:selectOneMenu id="status" styleClass="statusSelect" style="left: 150px; top: 62px; width:100px">
    <f:selectItem itemValue=""></option>
    <f:selectItem itemValue="0"></option>
    <f:selectItem itemValue="1"></option>
    <f:selectItem itemValue="2"></option>
</h:selectOneMenu>

<webuijsf:script>
  //setup metadata (images and such)
  var $select = $('.statusSelect');
  var children = $select.children('option');
  $(children[0]).data('image','base0.gif');
  //... and so on to add your metadata

  var oHandler1 = $select.msDropdown().data("dd");
  var index = oHandler1.selectedIndex;
</webuijsf:script>
于 2012-11-29T09:30:53.583 回答