在两个JSF视图之间xhtmls(都有视图范围的后台bean)我想在用户单击链接或按钮时传递参数。如果我有一个属性onclick与JavaScript函数打开另一个页面(在此页面中我想使用第一页中设置的参数)到commandButton或commandLink我得到f:param
属性为{{1如果我没有onclick属性,我就对了\'currentAccess\':\'3\',\'gridNo\':\'5\',
如果我有:
'currentAccess':'3','gridNo':'5',
HTML呈现如下:
<h:commandButton action="#{statisticsBean.showAccessIncorectAnswers()}" target="_blank"
value="#{strings.whatHaveDoDoneWrong}" rendered="#{o.date != '-' and o.answerNoWrong != 0}">
<f:param name="currentAccess" value="#{o.currentAccess}"/>
<f:param name="gridNo" value="#{o.noGrid}"/>
<f:param name="gridCategory" value="#{o.category}"/>
</h:commandButton>
这很好,我可以访问参数(f:viewpara或FacesContext,我使用最后一个像<input type="submit" name="j_idt73:0:j_idt74:j_idt77" value="Ce ai gresit" onclick="mojarra.jsfcljs(document.getElementById('j_idt73:0:j_idt74'),{'j_idt73:0:j_idt74:j_idt77':'j_idt73:0:j_idt74:j_idt77','currentAccess':'1','gridNo':'5','gridCategory':'Drept Procesual Civil'},'');return false" />
)
BUT 如果我有:
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("currentAccess")
在onclick事件中使用JavaScript函数我得到渲染:
<h:commandButton action="#{statisticsBean.showAccessIncorectAnswers()}" target="_blank"
onclick="confirmGridStatistics('#{strings.doYouWantToSeeTheWrongAnswersInAccessNo} #{o.currentAccess} #{strings.fromDate} #{o.date}?');"
value="#{strings.whatHaveDoDoneWrong}" rendered="#{o.date != '-' and o.answerNoWrong != 0}">
<f:param name="currentAccess" value="#{o.currentAccess}"/>
<f:param name="gridNo" value="#{o.noGrid}"/>
<f:param name="gridCategory" value="#{o.category}"/>
</h:commandButton>
并且在第二个视图支持bean中,我得到了<input type="submit" name="j_idt73:2:j_idt74:j_idt77" value="Ce ai gresit" onclick="jsf.util.chain(this,event,'confirmGridStatistics(\'Vrei sa vezi raspunsurile gresite in accessul 3 din data de 16-05-2013?\');','mojarra.jsfcljs(document.getElementById(\'j_idt73:2:j_idt74\'),{\'j_idt73:2:j_idt74:j_idt77\':\'j_idt73:2:j_idt74:j_idt77\',\'currentAccess\':\'3\',\'gridNo\':\'5\',\'gridCategory\':\'Drept Procesual Civil\'},\'\')');return false" />
来自FacesContext的参数。那是为什么?
更新 我以为
动作方法中的 null
可以解决它。但事实并非如此,它给了我一个FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().put("currentAccess", access);
我不知道为什么会这样。
答案 0 :(得分:0)
我已经用黑客解决了我的问题。我仍然不知道为什么用参数描述的问题。
我的解决方案(我知道这是一个黑客攻击):
所以我把参数(我想要传递)放到JavaScipt函数
<h:commandButton action="#{statisticsBean.showAccessIncorectAnswers()}" target="_blank"
onclick="confirmGridStatistics('#{strings.doYouWantToSeeTheWrongAnswersInAccessNo} #{o.currentAccess} #{strings.fromDate} #{o.date}?'
, '#{o.currentAccess}', '#{o.noGrid}', '#{o.category}');"
value="#{strings.whatHaveDoDoneWrong}" rendered="#{o.date != '-' and o.answerNoWrong != 0}"/>
,第二个查看请求网址如http://myserver:port/access.xhtml?currentAccess=34&noGrid=3&category=category
并在第二个视图支持bean中,我使用
访问参数HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String currentAccess= request.getParameter("currentAccess");
<强> STILL 强> 如果有人知道为什么最初的问题我会很感激它分享。 谢谢。