【问题标题】:JSF change BeanValue of h:SelectOneMenu in JavaScriptJSF 更改 JavaScript 中 h:SelectOneMenu 的 BeanValue
【发布时间】:2015-06-16 01:40:32
【问题描述】:

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

<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 设置为“any2”。然后我将 div id="any" 的代码复制到 div id="any2" 中。现在我想更改新 div 中的 selectOneMenu 值属性的值(目前:#{browserOSList.browserXP[0]})。 JavaScript代码:

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

如果我查看 HTML 代码,新值已正确设置为“#{browserOSList.browserXP[1]}”。 但是,如果我提交表单,则只有“任何”selectOneMenu 在 Bean 中设置他的值。 "any2" selectOneMenu 什么都不设置。

问题出在哪里?

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

【问题讨论】:

    标签: javascript html jsf selectonemenu


    【解决方案1】:

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

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

    完成此步骤后(可能还需要一些额外的验证)JSF 将更新服务器端数据模型。

    您尝试做的事情将提供在服务器上执行几乎所有操作的可能性,只需更改客户端上的 HTML 结果,因此,出于安全原因,这根本不可能。

    【讨论】:

    • 所以没有办法复制一部分代码并更改所选值的写入位置?
    【解决方案2】:

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

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

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

    祝你好运:-)

    【讨论】:

    • 谢谢你这可能会有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多