JSF在JavaScript中更改h:SelectOneMenu的BeanValue

时间:2015-04-10 10:57:00

标签: javascript html jsf selectonemenu

嘿,我复制HTML代码并通过JavaScript将其在运行时插入到我的HTML中。 Code I克隆是:

<div id="any"> 
   <h:selectOneMenu value="#{browserOSList.browserXP[0]}" id="dropDown-browser-XP-Vista-8-81-1">
      <f:selectItems value="#{selectOneMenu.selectBrowserXP}"/>
   </h:selectOneMenu>
</div>

首先,我通过JavaScript创建一个新的div,并将id设置为&#34; any2&#34;。然后我复制div id =&#34;任何&#34;进入div id =&#34; any2&#34;。现在我想在新div中更改selectOneMenu值属性的值(目前:#{browserOSList.browserXP [0]})。 JavaScriptCode:

    $("#any2 select").attr("value","#{browserOSList.browserXP[1]}");

如果我查看HTML代码,则新值设置为&#34;#{browserOSList.browserXP [1]}&#34;正确。 但是,如果我只提交表格,那么#34;任何&#34; selectOneMenu在Bean中设置他的值。 &#34; any2&#34; selectOneMenu什么也没设置。

问题出在哪里?

我希望你理解我的意思。如果没有,我将发布完整的源代码(太多和复杂)。 你也可以用德语回答。非常感谢!

2 个答案:

答案 0 :(得分:1)

检查JSF生命周期:http://docs.oracle.com/javaee/6/tutorial/doc/bnaqq.html

服务器不知道您在客户端进行的HTML更改。因此,在应用请求值阶段中,客户端生成的组件不是服务器端组件树的一部分,因此JSF不会更新这些组件的值。

完成此步骤后(可能经过一些额外的验证)后,JSF将更新服务器端数据模式。

您尝试做的事情只能通过更改客户端上的HTML结果来提供服务器上几乎所有内容的可能性,因此,出于安全原因,它根本不可能。

答案 1 :(得分:0)

在我看来,你是以错误的方式混合jsf和javascript。 您应该在服务器端生成第二个选择,作为第一个。 如果由于任何原因你不能,而不是:

#{browserOSList.browserXP [1]}是一个EL(表达式语言)表达式,jsf使用它来标识用于设置select值的bean变量。在javascript(客户端)中,您不会从bean获取值,而只是包含表达式的字符串。所以你需要用这个值写一个javascript变量初始化服务器端: var secondSelectValue =&#34;#{browserOSList.browserXP [1]}&#34 ;; 这是一个问题......

为了在bean中设置第二个值,您需要通过第二个选择的名称在bean中标识此变量(查看第一个选择名称属性)。它应该有一个名称属性,最后是dropDown-browser-XP-Vista-8-81-1。所以JSF在bean中设置这个变量。为了使用第二个选择在bean中设置另一个变量,您需要通过第二个选择的name属性正确识别第二个bean变量,如同第一个选择...

祝你好运: - )