gpt4 book ai didi

javascript - javascript警报功能如何在网络浏览器上的java的String var中工作

转载 作者:行者123 更新时间:2023-11-29 22:07:51 28 4
gpt4 key购买 nike

我在类里面有一个字符串变量字符串消息;

private int checkConstraints() 
int a = 0;
if (docProcessId==0) {
a++;
message = "<script language=\"javascript\"> alert('Please Select Doc Process Name'); </script>";
}else if (refTypeName.equals("")) {
a++;
message = "<script> alert('Enter Reference Type Name!');</script>";
}

return a;

}

实际上我是这样做的,但是当这个方法被调用时不等于 0 那么消息等于整个字符串打印在页面上没有给出任何解决方案的警告

最佳答案

默认情况下,JSF 将所有模型值转义为 XSS attack prevention 的一部分.您的具体问题表明您对此一无所知。您可以使用 <h:outputText> 来“解决”它与 escape属性设置为 false .

<h:outputText value="#{bean.message}" escape="false" />

但是,您的具体问题更大。从 JSF/MVC 的 Angular 来看,您基本上在这里犯了两个主要的设计错误:

  1. 在模型而不是 View 中编写 HTML 代码。
  2. 在操作方法中而不是在验证器中执行验证。

您应该在 View 中编写 HTML 代码,而不是在模型中。您应该使用普通的 JSF 验证器执行验证。 JSF 有很多内置验证器。

此外,这并不是真正的设计错误,更多的是用户体验错误,还有第三个错误:使用 JavaScript 警报来显示验证消息。这简直就是 1990 和 Web 1.0。我们目前处于 2013 年,并且学到了很多东西,很多当时的用户体验失败。使用 JavaScript 警报显示验证消息就是其中之一。

这是使用 JSF 提供的验证工具的正确方法:

<h:form>
<h:selectOneMenu value="#{bean.docProcessId}" required="true"
requiredMessage="Please Select Doc Process Name">
<f:selectItems ... />
</h:selectOneMenu>
<h:inputText value="#{bean.refTypeName}" required="true"
requiredMessage="Enter Reference Type Name" />
<h:commandButton value="submit" />
<h:messages />
</h:form>

就是这样。 required="true"告诉 JSF 这些输入是必需的。 requiredMessage属性允许您为所需的验证指定自定义消息。消息将显示在 <h:messages> 声明的位置。 .您可以通过 layout 自定义布局属性和 CSS 表示类似 infoClass , errorClass等等。您甚至可以手动遍历它并为每条消息手动创建烦人的警报,而不是使用 <h:messages> :

<ui:repeat value="#{facesContext.messageList}" var="message">
<script>alert("#{message.summary}");</script>
</ui:repeat>

关于javascript - javascript警报功能如何在网络浏览器上的java的String var中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19926427/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com