在Struts2中,readOnly属性没有用JavaScript函数设置

readOnly attribute not being set with JavaScript function in Struts 2

本文关键字:有用 JavaScript 函数 设置 属性 Struts2 readOnly      更新时间:2023-09-26

我正在尝试创建一个编辑链接,以便在单击时以只读模式打开该行的详细信息。

这是链接:

<c:set var="deletableBook" value="0"/>
<a href="" title="Edit Book Info" onClick='resetDateAndMakeReadOnly(${deletableBook}); return performAction(${item.bookId}, "bookEdit");'>Edit</a>

这是一个被称为的函数

function resetDateAndMakeReadOnly(allEditable) {      
 var e22 = document.getElementById('book_Date');
 var e3 = document.getElementById('book_type');
 var e4 = document.getElementById('book_Number');
 if (allEditable){
     e22.readOnly=false;
     e3.disabled=false;
     e4.readOnly=false;
     alert("read and write");
 } else {
     e22.readOnly=true;
     e3.disabled=true;
     e4.readOnly=true;
     alert("readOnly new");
 }
 e22.value = "<c:out value='${params.book_Date}'/>";
 return false;    }

目前,运行此方法时似乎没有任何变化。我已经确认它符合逻辑的正确部分,但内容仍然是可编辑的。

这是因为您正在使用空href的链接来触发将重新加载页面的javascript函数。在href中使用javascript:void(0);

<a href="javascript:void(0);" title="Edit Book Info" onClick='resetDateAndMakeReadOnly(${deletableBook}); return performAction(${item.bookId}, "bookEdit");'>Edit</a>
属性deletableBook不是布尔值,也不是javascript函数中所期望的false。切换动作中的变量
session.put("allEditable", !(session.get("allEditable")==null?Boolean.FALSE:(Boolean)session.get("allEditable")));

然后使用

$(document).ready(function(){
    resetDateAndMakeReadOnly(<s:property value="%{#session.allEditable}"/>);
});

这将在重新加载页面时根据CCD_ 6重置字段属性。但是这个

<s:a href="" title="Edit Book Info" onClick="resetDateAndMakeReadOnly(%{#session.allEditable});">Make readonly</s:a>

将不会重新加载页面,并保留allEditable会话属性中的值。这种语法可能有点混淆IDE,但它正确地评估了OGNL表达式并像一样呈现

<a title="Edit Book Info" onClick="resetDateAndMakeReadOnly(false);">Make readonly</a>

没有href属性,这就是不重新加载页面的原因。

此外,JSP中的元素应该可以通过设置其id属性来查找。