我试图通过URL发送参数,它失败了,因为我有点不能分配值的bean或我不能concat值与URL字符串。通过我的手都写作品的颜色值,例如方式:通过URL发送参数的JSF 2
<h:button outcome="viewParams?c=red"/>
这是我从中尝试发送参数的页面代码。
<h:form>
<h:selectOneMenu value="#{viewMngr.selectedColor}">
<f:selectItems value="#{viewMngr.colors}" var="c"
itemLabel="#{c}" itemValue="#{c}" />
<f:ajax listener="#{viewMngr.valueChanged}" />
</h:selectOneMenu>
<h:button outcome="viewParams?c=#{viewMngr.selectedColor}"/>
</h:form>
这是viewManager bean代码(据我可以看到豆值设置,因为我能够把它打印出来)这里
@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;
}
}
谢谢你的回答。它表明有多种方法可以解决同一个任务。你的代码有效,但你必须添加id =“buttonId”到该按钮,并在颜色值改变时呈现它。 。如果你编辑你的代码,我会给你+1 –
Benas
我认为你需要重新渲染你的按钮,因为你有param直接包裹到你的结果(所以它被赋予客户端与当前的颜色连接)。但是,如果使用我的解决方案,则在单击按钮时检查'#{viewMngr.selectedColor}',以便同时获取该属性中的颜色。改变数值时不需要重新渲染按钮。啊,关于'+1',你应该考虑接受点击复选标记(✓在投票柜台下面)的答案,因为我看到你的大部分问题仍然没有他们;-) –
其实你需要添加id按钮并重新渲染它,因为没有它c不会被设置,并通过url发送参数失败。这不是关于bean的价值,而是关于c值。 – Benas