Jsf 2 JSF2通过URL发送参数
我试图通过URL发送参数,但失败了,因为我无法为bean赋值,或者无法用URL字符串表示值。顺便说一句,当我手写颜色值时,一切都正常,例如:Jsf 2 JSF2通过URL发送参数,jsf-2,parameter-passing,Jsf 2,Parameter Passing,我试图通过URL发送参数,但失败了,因为我无法为bean赋值,或者无法用URL字符串表示值。顺便说一句,当我手写颜色值时,一切都正常,例如: <h:button outcome="viewParams?c=red"/> 作为您的目标页面viewParams.xtml: 获取视图id并将参数附加到url。结果表明,该按钮需要重新提交,因为未设置c值。棘手的是设置了viewMngr.selectedColor,但要设置参数c,需要重新选择按钮。以下是编辑后的代码:
<h:button outcome="viewParams?c=red"/>
作为您的目标页面viewParams.xtml:
获取视图id并将参数附加到url。结果表明,该按钮需要重新提交,因为未设置c值。棘手的是设置了viewMngr.selectedColor,但要设置参数c,需要重新选择按钮。以下是编辑后的代码:
<h:body>
<fieldset>
<h:form prependId="false">
<h:selectOneMenu value="#{viewMngr.selectedColor}">
<f:selectItems value="#{viewMngr.colors}" var="c"
itemLabel="#{c}" itemValue="#{c}" />
<f:ajax listener="#{viewMngr.valueChanged}" render="buttonId"/>
</h:selectOneMenu>
<h:button id="buttonId" outcome="viewParams?c=#{viewMngr.selectedColor}"/>
</h:form>
</fieldset>
</h:body>
谢谢您的回答。这表明解决同一任务的方法不止一种。您的代码可以工作,但必须向该按钮添加id=“buttonnid”,并在颜色值更改后进行渲染。如果你编辑你的代码,我会给你+1,我想你需要重新启动你的按钮,因为你有参数直接包装到你的结果(所以它是给客户端与当前的颜色连接)。但是,如果使用我的解决方案,请在单击按钮时检查{viewMngr.selectedColor}
,以便它同时获得该属性中的颜色。更改值时不需要重新启动按钮。啊,关于“+ 1”,你应该考虑接受点击复选标记的答案(✓ 请在计票台下方做标记),因为我看到您的大多数问题仍然没有答案;-)实际上,您需要将id添加到按钮并重新提交它,因为没有它,c无法设置,并且通过url发送参数失败。这与bean值无关,而是与c值有关。请在ViewMngr
中的@ManagedBean
注释下方使用@ViewScoped
进行检查。这样,您就可以保持通过h:selectOneMenu
完成的选择。顺便说一下,Color
不能是@ManagedBean
。ViewMngr范围是正确的(虽然我尝试了ViewScope),但是我不需要使用ViewScope,因为我想传递值并忘记ViewMngr bean中的内容,所以请求范围在这里很好。我不明白为什么颜色不能是@ManagedBean,因为我使用颜色来获取参数值。
@ManagedBean
public class ViewMngr {
private ArrayList<String> colors = new ArrayList<String>();
private String selectedColor;
public ViewMngr()
{
getColors().add("red");
getColors().add("green");
getColors().add("blue");
getColors().add("gray");
getColors().add("yellow");
getColors().add("orange");
}
public ArrayList<String> getColors() {
return colors;
}
public void setColors(ArrayList<String> colors) {
this.colors = colors;
}
public String getSelectedColor() {
return selectedColor;
}
public void setSelectedColor(String selectedColor) {
System.out.println("Selected color: " + selectedColor);
this.selectedColor = selectedColor;
}
public void valueChanged() {
System.out.println("Value changed!");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<f:metadata>
<f:viewParam name="c" value="#{color.color}"/>
</f:metadata>
<h:body style="background-color:#{color.color}">
<fieldset>
<h:form>
<h:outputText value="Some text!"/>
</h:form>
</fieldset>
</h:body>
</html>
@ManagedBean
public class Color {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
if(color != null)
System.out.println(color);
this.color = color;
}
}
<h:body>
<fieldset>
<h:form prependId="false">
<h:selectOneMenu value="#{viewMngr.selectedColor}">
<f:selectItems value="#{viewMngr.colors}" var="c"
itemLabel="#{c}" itemValue="#{c}" />
<f:ajax listener="#{viewMngr.valueChanged}" render="buttonId"/>
</h:selectOneMenu>
<h:button id="buttonId" outcome="viewParams?c=#{viewMngr.selectedColor}"/>
</h:form>
</fieldset>
</h:body>