JSF表单值在提交时消失
当我尝试提交表单时,输入值出现在验证方法中,但在提交方法中消失了。为什么程序到达提交功能时输入属性为空 输入:asdfJSF表单值在提交时消失,jsf,jakarta-ee,javabeans,Jsf,Jakarta Ee,Javabeans,当我尝试提交表单时,输入值出现在验证方法中,但在提交方法中消失了。为什么程序到达提交功能时输入属性为空 输入:asdf genres.xhtml <h:form> <h:inputText id="userGenre" value="#{genres.input}" validator="#{genres.validateLength}" required="true" size="3"
genres.xhtml
<h:form>
<h:inputText
id="userGenre"
value="#{genres.input}"
validator="#{genres.validateLength}"
required="true" size="3"
/>
<h:commandButton
value="Add genre"
action="#{genres.submit}"
/>
<h:message for="userGenre" />
</h:form>
<managed-bean>
<managed-bean-name>genres</managed-bean-name>
<managed-bean-class>no.krystah.Genres</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>input</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
</managed-bean>
Genres.java
@Named
@SessionScoped
public class Genres {
static final Logger LOG = LoggerFactory.getLogger(Genres.class);
private String input = "";
public void validateLength(FacesContext context, UIComponent toValidate, Object value) {
LOG.info("Validating");
input = (String) value;
LOG.info("name:"+input); // result: "name:asdf"
int min = 3;
int max = 15;
int len = input.length();
if (len < min || len > max) {
((UIInput) toValidate).setValid(false);
FacesMessage message = new FacesMessage("Must be at least 3 and at most 15 characters.");
context.addMessage(toValidate.getClientId(context), message);
return;
}
}
public void submit() {
LOG.info("Submitting");
LOG.info("name:"+input); // result: "name:"
// process input
}
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
}
@Named
@会议范围
公共类体裁{
静态最终记录器日志=LoggerFactory.getLogger(Genres.class);
私有字符串输入=”;
public void validateLength(FacesContext上下文、UIComponent toValidate、对象值){
日志信息(“验证”);
输入=(字符串)值;
LOG.info(“name:+input);//结果:“name:asdf”
int min=3;
int max=15;
int len=input.length();
如果(lenmax){
((UIInput)toValidate).setValid(false);
FacesMessage message=新的FacesMessage(“必须至少3个字符,最多15个字符”);
addMessage(toValidate.getClientId(context),message);
返回;
}
}
公开作废提交(){
日志信息(“提交”);
LOG.info(“名称:”+输入);//结果:“名称:”
//过程输入
}
公共字符串getInput(){
返回输入;
}
公共void setInput(字符串输入){
这个输入=输入;
}
}
faces config.xml
<h:form>
<h:inputText
id="userGenre"
value="#{genres.input}"
validator="#{genres.validateLength}"
required="true" size="3"
/>
<h:commandButton
value="Add genre"
action="#{genres.submit}"
/>
<h:message for="userGenre" />
</h:form>
<managed-bean>
<managed-bean-name>genres</managed-bean-name>
<managed-bean-class>no.krystah.Genres</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>input</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
</managed-bean>
体裁
不,克丽斯塔
一场
输入
java.lang.String
在{genres.submit}
中,当您尝试提交时,JSF将生成您的genres类的新实例,因此输入为空,但是如果您在genres类顶部使用@ManagedBean注释,我认为代码应该可以正常工作,这是有意义的,因为我初始化“input”字段时使用的任何内容(在本代码中,我使用“”)都是提交时发送的内容。然而,添加@ManagedBean注释并没有起到任何作用。不幸的是,我收回了这一点。单独添加ManagedBean不起作用,但如果我也删除了@Named,它就起作用了。谢谢。:)不客气,很高兴看到你的问题已经解决了