我正在为Oracle数据库编写一个非常简单的前端。它基于JSF 1.2,jsp,并部署在glassfish-ee-2.1上,并使用NetBeans 6.5.1进行开发。
是的,我知道这是2012年。
必须阅读内容,或者更新内容,然后将其保存回数据库。
它适用于基于文本的元素。我为我的UI元素添加了绑定属性,我可以从bean访问它们以检索各种文本字段的值等。
我正在使用(这是一个要求?!)msDropdown组件(official page),基于jquery,它允许有一个带有图像和文本的漂亮的下拉菜单。
因为这个元素不是标准的,所以我没有找到使用绑定属性从支持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>
但我总是得到错误已报告&lt;不得用于某个值。
知道如何从bean访问特殊的下拉列表吗?或者将它的值传递给bean?
非常感谢您的帮助,如果您需要更多代码,请告诉我们!
Oli来自2006年./。
答案 0 :(得分:0)
msDropdown通过检修正常的html选择来工作。但是,如果您实际在jsf文档中插入html选择,则不会与jsf生命周期进行任何集成。
解决方案是使用实际的jsf组件,而不是selectOneMenu。它将完全集成到生命周期中,这意味着您不需要任何黑客来检索价值。它将像您页面上的任何其他组件一样提交。
selectOneMenu
呈现与客户端上的普通html选择一样,这意味着您可以使用msDropDown。唯一的困难是获得组件的id。我建议改用styleClass
。这会更容易。
<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>