【问题标题】:Parameters empty using JSF/Javascript使用 JSF/Javascript 为空参数
【发布时间】:2013-10-31 11:17:56
【问题描述】:

当我尝试将参数从 JSF 传递到 Javascript 时出错,我的参数为空。

JSF 代码:

<h:commandButton immediate="true" value="#{bundle.hello}" 
                            onclick="return test('#{myBean.parameter1}', '#{myBean.parameter2}');"/>

Javascript 代码:

function test(parameter, parameter2){
    html2canvas($('#body'), {
        onrendered: function (canvas) {
            var img = canvas.toDataURL("image/png");
            var newImg = window.open(img);
            newImg.document.write("<title>" + parameter+ " - " + parameter2+ "</title>");
        }
    });
    return false;
}

我发现一些奇怪的东西,如果我在我的函数中删除“return false”,参数就可以了。不幸的是,由于其他原因,我需要“return false”。

你能解释一下我必须如何解决它吗?

谢谢。

【问题讨论】:

  • 命令按钮生成的 HTML 输出是什么样子的?
  • 如果我保持返回 false,生成的 HTML 输出看起来像: 如果我删除返回 false :
  • 那么,这些参数不是你设置的,而是最终用户在相同表单的输入字段中设置的?
  • 如果我去掉return false,生成的html输出是
  • 这肯定是一种误解,是由于对基本 Web 内容的工作原理的误解而导致您在单击按钮后查看生成的 HTML 输出。您应该在单击按钮之前查看生成的 HTML 输出,因为那是单击期间的状态。

标签: javascript jsf


【解决方案1】:

EL(那些#{} 的东西)在生成 HTML 输出期间运行,而不是在执行 JavaScript 代码期间。在浏览器中右键单击并查看源代码。你会看到

onclick="return test('', '');"

当 onclick 被触发时,test() 函数显然是用空参数调用的。我绝对没有看到将函数的返回值更改为true 是如何解决这个问题的。很可能您错误地识别了问题,并且仅当按下按钮两次而不是一次时,问题才“修复”。

您需要以不同的方式解决这个问题。一种方法是让 JS 直接获取 HTML 输入元素的值。例如

<h:form id="form">
    <h:inputText id="input1" ... />
    <h:inputText id="input2" ... />
    <h:commandButton ... onclick="test(); return false;" />
</h:form>

function test() {
    var input1 = document.getElementById("form:input1").value;
    var input2 = document.getElementById("form:input2").value;
    // ...
}

【讨论】:

  • 谢谢 BalusC :) 它正在工作。我不认为问题出在 HTML 中的 EL。
  • 我还有一个问题,我已经编辑了我的第一篇文章。你能读一下吗?谢谢。
  • 如果您有新问题,请提出新问题。不要针对新的和完全不相关的问题/问题重复使用/修改现有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 2012-06-04
相关资源
最近更新 更多