我想在JSF中读取backing bean值,然后传递给JavaScript,我可以知道如何做到这一点吗?
支持bean示例代码:
@ManagedBean(name="enquiry")
@SessionScoped
public class Enquiry {
public boolean noQuery;
/** getter and setter **/
}
在XHTML示例代码中,我想传递支持bean值,然后像这样传递到showNoQueryPrompt()
:
<h:commandLink onClick="showNoQueryPrompt(#{enquiry.noQuery})">
</h:commandLink>
然后在JavaScript代码中,我可以读取布尔值来确定是否应该提示或不提示。这是代码:
<script ...>
var showNoQueryPrompt(Boolean showPrompt) {
if( showPrompt == "true" ) {
alert('No query');
}
}
</script>
答案 0 :(得分:7)
到目前为止,您需要了解JSF仅生成HTML代码,而JS是HTML的一部分。所以你需要做的就是相应地编写JSF / EL代码,它生成有效的HTML / JS代码。实际上,在生成的JavaScript代码中使用EL来内联bean属性就像在尝试中一样,这是正确的方法之一。
假设这确实是真正的代码,但是你犯了一些语法错误。 onClick
属性无效。它必须全部小写。否则,JSF根本不会呈现该属性。
<h:commandLink value="link" onclick="showNoQueryPrompt(#{enquiry.noQuery})" />
JavaScript没有强类型的概念。函数参数中的Boolean
类型无效。去掉它。否则你将面临一个很好的JS语法错误(在浏览器的JS控制台中)。
function showNoQueryPrompt(showPrompt) {
if (showPrompt) {
alert('No query');
}
}
请注意,我希望您了解在命令链接自己的action
被调用之前运行(您现在应该理解; JSF生成HTML;在浏览器中右键单击页面并查看来源自己查看)。但是你没有在你的具体问题中讨论这个问题(更多的是,你根本没有用问题中的给定代码描述具体问题),所以我不能就此给出详细的答案。
答案 1 :(得分:4)
您可以尝试here
的方法并将您的bean字段保存在:
<h:inputHidden id="hidden2" value="#{enquiry.noQuery}" />
然后,使用此字段的值调用您的方法。