我正在使用JSF制作关于乘车共享/销售公交车票的网页。 在一个特定页面上,已登录用户可以发布他们的广告(提供或寻找乘车)。 他们应输入以下信息:广告标题,原籍城市,目的地城市,出发时间等。
我想要的是,用户在点击提交后获得弹出窗口显示的目的地城市的天气预报。 这也意味着我正在使用openweathermap这样的服务。
基本上,我有一个h:form
和h:commandButton
像这样:
<h:commandButton value="Publish" action="#{adBean.publishAd}" type="submit" onclick="showPopup()">
</h:commandButton>
问题是我不知道如何传递bean的值
<h:inputText value="#{adBean.ad.destinationCity}"/>
到JavaScript方法showPopup()
。
我试过这个,但destinationCity原来是null。
<h:commandButton value="Publish" action="#{adBean.publishAd}" type="submit" onclick="showPopup(#{adBean.ad.destinationCity})">
</h:commandButton>
为什么会发生这种情况?如何将其值传递给JavaScript代码?
它是null
,因为它被放在一个用于javascript的属性(onclick)中。这些属性在页面显示时“呈现”,而不是(再次)在提交时或其他时刻。因此,如果它在那时被初始化为null
,那么从服务器传输到客户端的是什么
<button value="Publish" ... onclick="showPopup(null)" />
来自@BalusC的报道在How to invoke a bean action method using a link? The onclick does not work中有这个:
在JSF中,只有将EL表达式解释为attributes的
MethodExpression
才能用于声明动作方法。所有其他属性都被解释为ValueExpression
,并且在JSF生成HTML输出时立即执行它们。这涵盖了onclick
属性,其值实际上应代表JavaScript函数。
客户端的(h:?)inputText
呈现为一个普通的html inputText,所以如果你想在提交之前访问它的值(就像我怀疑你想要的那样),你可以在showPopup
中这样做,就像你在普通的html / javascript中一样。
如何做到这一点是mentioned in many stackoverflow Q/A所以要么选择一个最适合你的人,例如How do I get the value of text input field using JavaScript?,但请务必阅读How can I know the id of a JSF component so I can use in Javascript