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