Javascript 复合组件jsf*primefaces
在动态生成widgetVar名称时,我无法使用它。我们如何恰当地调用这样的小部件?组件代码:Javascript 复合组件jsf*primefaces,javascript,jsf,primefaces,composite-component,Javascript,Jsf,Primefaces,Composite Component,在动态生成widgetVar名称时,我无法使用它。我们如何恰当地调用这样的小部件?组件代码: <cc:attribute name="id" required="true" type="java.lang.String" /> ... <cc:implementation> <p:selectOneRadio widgetVar="widgetVariable#{cc.attrs.id}" id="#{cc.attrs.id}" required="fals
<cc:attribute name="id" required="true" type="java.lang.String" />
...
<cc:implementation>
<p:selectOneRadio widgetVar="widgetVariable#{cc.attrs.id}" id="#{cc.attrs.id}" required="false" immediate="#{cc.attrs.immediate}"
value="#{cc.attrs.value}">
<p:ajax event="click" oncomplete="checkRadio()"/>
<cc:insertChildren/>
</p:selectOneRadio>
<script type="text/javascript">
/* <![CDATA[ */
function checkRadio() {
var widgetVariable = widgetVariable#{cc.attrs.id}; //HERE PROBLEM
widgetVariable.dosmth();
}
/* ]]> */
</script>
</cc:implementation>
但是每个状态应该只针对一个复合状态,每个复合状态使用这个变量,一些想法?实际上有两个问题 第一个问题是在XHTML文件中声明JS函数,而不是在实际的JS文件中。如果您有多个这些组件,那么基本上就是为HTML输出生成多个JS函数
checkRadio()
。在浏览器中拖动页面,右键单击并查看源代码。你基本上会看到
<script type="text/javascript">
function checkRadio() {
// ...
}
</script>
<script type="text/javascript">
function checkRadio() {
// ...
}
</script>
<script type="text/javascript">
function checkRadio() {
// ...
}
</script>
...
回到您的具体问题,您的第二个问题,您可以使用window[variableName]
符号通过动态组合的变量名获得全局(窗口)变量。因此,myComposite.js
中的checkRadio()
函数(可以随意命名,但与myComposite.xhtml
的文件名相同)应该如下所示:
function checkRadio(compositeId) {
var widgetVariableName = "widgetVariable" + compositeId;
var widgetVariable = window[widgetVariableName];
widgetVariable.dosmth();
}
id
看起来怎么样?它包含哪些字符?任何,一些字母/数字“MyComponent”“something2”等。所以没有特殊字符,只有字母数字字符?是的,我正在测试atm Balus soltuions,brb。我应该把这个js文件放在哪里?我添加了libary标记,并将其放置在复合组件所在的位置,但当我要使用此复合组件进行页面时,它在页面源代码中显示了一些erorr:。。。与所有其他JSF资源位于同一位置。在/resources
文件夹中。如果希望它与compositexhtml位于同一文件夹中,只需根据实际的/resources
-相对路径相应地修改
。顺便说一下,“js”绝对是一个糟糕的库名称。还可以将其作为另一个函数参数传递吗?每个复合组件可以有许多状态,我需要记住这些状态。例如,我得到了1th state=3 2nd state=2 3rd state=0 atm,这个var状态是全局的,所有人都使用它。所以传递它不是一个解决方案,而这个变量可以有一个状态。我不知道传递它作为另一个函数参数是如何形成问题的。
<cc:implementation>
<h:outputScript name="myComposite.js" />
...
<p:ajax event="click" oncomplete="checkRadio('#{cc.attrs.id}')" />
</cc:implementation>
function checkRadio(compositeId) {
var widgetVariableName = "widgetVariable" + compositeId;
var widgetVariable = window[widgetVariableName];
widgetVariable.dosmth();
}