我有一种计算费用的方法,但你需要点击两次按钮才能计算
这是获取数据库中的数据并计算
的方法public Float findTarifaBandeira1() {
try {
//SQL
} catch (NoResultException ne) {
System.out.print("Tarifa não encontrada"); // Colocar messagesfaces
}
tarifaBand1 = (bandeira.getValorInicial() + ( bandeira.getTarifaCorrida().getValorKm() * km));
BigDecimal vt = new BigDecimal(tarifaBand1).setScale(2, RoundingMode.HALF_EVEN);
tarifaBand1 = vt.floatValue();
return tarifaBand1;
}
此方法触发按钮的单击调用其他方法和上述方法 我有一个计算费用的方法,但你需要点击两次按钮才能计算
public void consultarBandeira() throws ParseException {
getData();
getHora();
convertDistance();
findTarifaBandeira1();
findTarifaBandeira2();
findTarifaVolumesDeMao ();
findTarifaVolumesNormais ();
findTarifaVolumesGrandes();
}
在我的JSF页面中,我使用远程命令来调用上面的方法
<p:commandButton value="#{msg['btn-search']}"
styleClass="btn btn-primary" onclick="findRoute()"/>
<p:remoteCommand actionListener="#{searchBean.consultarBandeira()}"
id="consultaValor" name="consultaValor"
update="bandeira1, bandeira2, nomeVPequenos,
descricaoVPequenos, valorVpequenos, nomeVNormais,
descricaoVNormais, valorVNormais, nomeVGrandes,
descricaoVGrandes, valorVGrandes"/>
findRoute()
是一个调用JavaScript consultaValor
组件的函数,该组件触发了searchBean
中的方法。
function findRoute(){
event.preventDefault();
var addressOrigin = origin;
var addressDestination = document.getElementById("addr").value +
document.getElementById("city").value;
var request = {
origin: addressOrigin,
destination: addressDestination,
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.metric
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
directionsDisplay.setPanel(document.getElementById("route"));
var route = response.routes[0];
for (var i = 0; i < route.legs.length; i++){
routeSegment = i + 1;
distance = route.legs[i].distance.value;
}
document.getElementById("distance").value = distance;
}
});
consultaValor();
}
答案 0 :(得分:0)
当你单击commandButton时,它会对服务器进行两次回发:一次用于remoteCommand,一次用于按钮本身。这很可能是导致问题的原因。
由于您实际上只是使用该按钮进行客户端操作,因此请指示您的commandButton不要通过onclick进行回发。
此外,由于您在findRoute()javascript方法中设置表单数据,因此您需要确保在后端处理它。 remoteCommand的进程的默认值是@this。
<p:commandButton value="#{msg['btn-search']}"
styleClass="btn btn-primary" onclick="findRoute(); return false"/>
<p:remoteCommand actionListener="#{searchBean.consultarBandeira()}"
id="consultaValor" name="consultaValor"
process="@form"
update="bandeira1, bandeira2, nomeVPequenos,
descricaoVPequenos, valorVpequenos, nomeVNormais,
descricaoVNormais, valorVNormais, nomeVGrandes,
descricaoVGrandes, valorVGrandes"/>
但如果是我,我会通过将逻辑组合到命令按钮本身来简化这一点:
<p:commandButton value="#{msg['btn-search']}"
styleClass="btn btn-primary" onstart="findRoute()"
action="#{searchBean.consultarBandeira()}"
process="@form"
update="bandeira1, bandeira2, nomeVPequenos,
descricaoVPequenos, valorVpequenos, nomeVNormais,
descricaoVNormais, valorVNormais, nomeVGrandes,
descricaoVGrandes, valorVGrandes" />